Gibt es eine Möglichkeit, dass Schienen eine Zahl mit Kommas ausdrucken?
Wenn ich beispielsweise eine Nummer 54000000.34 habe, kann ich <% = number.function%> ausführen, wodurch "54.000.000.34" gedruckt wird.
Vielen Dank!
ruby-on-rails
ruby
Jess
quelle
quelle
ActionView::Helpers::NumberHelper
in das Modul aufnehmen.number_with_delimiter
ist zu komplex und sehr langsam, mit enormen Tiefen von Anrufstapeln. Es wird verwendeti18n
, um alle Zahlen zu formatieren, die der Menschheit und außerirdischen Zivilisationen bekannt sind (oder um entweder eine,
oder.
eine Dezimalstelle zu wählen , selbst wenn Sie sie als Argument angeben). Es weist Tausende von Objekten zu (daher sind seine Leistungsmuster komplex und schwer zu profilieren). Verwenden Sie nur reguläre Ausdrücke, wenn Sie nicht unterschiedliche Methoden zum Formatieren von Zahlen je nach Gebietsschema unterstützen müssen.Für alle, die keine Schienen benutzen:
quelle
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
ausreichend? Vielen Dank.Der direkte Weg, dies mit oder ohne Schienen zu tun , ist:
Weitere Optionen finden Sie unter Active Support Core-Erweiterungen - Numerisch - Formatierung .
quelle
ActiveSupport::NumberHelper.number_to_delimited
. Diese Antwort verdient viel mehr positive Stimmen.Ja, verwenden Sie den NumberHelper . Die Methode, nach der Sie suchen, ist number_with_delimiter .
quelle
Wenn Sie Kommas außerhalb von Ansichten hinzufügen und einige Module nicht einschließen möchten, können Sie die Methode number_to_delimited verwenden (Rails-Version> = 4.02). Beispielsweise:
quelle
Wenn Sie viel tun, aber auch zu Ihrer Information, weil dies nicht durch das oben Gesagte impliziert wird, hat Rails sinnvolle Standardeinstellungen für die
number_with_delimiter
Methode.Sie müssen den Begrenzerwert nicht angeben, wenn Sie dies auf die typischste Weise tun.
quelle
Ein besserer Weg für diejenigen, die keine Schienen verwenden, die Dezimalstellen verarbeiten:
Wenn Sie ein anderes Trennzeichen möchten, ändern Sie das letzte ',' in der Regex.
Für den Bonus funktioniert der Regex folgendermaßen:
\\1
.\\1
wird\1
bei der Auswertung, was mit der ersten Erfassungsgruppe in der Regex übereinstimmt. In dieser Regex ist das(\d)
.(\d)(?=(\d\d\d)+)
stimmt mit einer Ziffer überein, gefolgt von einer oder mehreren Gruppen von 3 Ziffern. Die erste Gruppe von Parens ist unsere\1
Fanggruppe, die zweite wäre\2
. Wenn wir es einfach so belassen würden, würden wir bekommen:123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
Dies liegt daran, dass 1234 Übereinstimmungen, 2345 Übereinstimmungen und 3456 Übereinstimmungen, also setzen wir ein Komma nach der 1, der 2 und der 3.(\d)(?=(\d\d\d)+(?!\d))
stimmen wir mit allem überein , was vor einer Ziffer steht. Dies bedeutet, dass eine Ziffer gefolgt von 3 Ziffern, auf die keine Ziffer folgt, übereinstimmt. Der Grund, warum dies funktioniert, ist, dass gsub weiterhin Dinge ersetzt, die mit der Zeichenfolge übereinstimmen. Wenn wir nur das erste Spiel ersetzen würden, würden wir für eine Zahl wie 123456789 123456.789 erhalten. Da 123456.789 immer noch mit unserer Regex übereinstimmt, erhalten wir 123.456.789.Hier habe ich den Code erhalten: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
Und hier habe ich erfahren, was in dieser Regex vor sich geht: http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
quelle
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
Eine andere Lösung, die keine Helfer verwendet: Formatieren Sie mit 2 Dezimalstellen und ersetzen Sie diese. durch ,
quelle
Sie können Methoden von verwenden
ActiveSupport
Beispielsweise:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
quelle
Das war mein Weg in Rubin
Addition bearbeiten: Grundsätzlich werden alle Kommas zwischen den Zahlen hinzugefügt und nur diejenigen ausgewählt, bei denen der Index + 1% 6 ist
Ich dachte, die Kommas bis zu 100 wären in Ordnung, aber wenn Sie eine super lange Zahl wollen, machen Sie einfach 100 zu einer höheren Zahl
quelle
neue Syntax
Wenn Sie Delimeter für Geld verwenden möchten, können Sie dies tun
Dies wird auch hinzufügen
$
. Wenn Siemoney
Edelsteine verwenden, können Sie dies tunDies wird auch setzen
$
.number_with_delimiter
Rubingeld
number_to_currency
quelle
Im Folgenden wird der Trick sowohl für das Trennzeichen als auch für die Genauigkeit ausgeführt ( API-Referenz ).
(oder nur aus Ansichten
number_to_rounded
, keine Notwendigkeit für das Suffix)HTH
quelle
für Javascript Leute
:) :)
quelle