回答:
あなたはnumber_with_delimiter
方法が欲しいです。例えば:
<%= number_with_delimiter(@number, :delimiter => ',') %>
または、number_with_precision
メソッドを使用して、数値が常に小数点以下2桁の精度で表示されるようにすることができます。
<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>
number_with_delimiter
非常に複雑で、非常に遅く、非常に深い呼び出しスタックがあります。i18n
人類や地球外の文明に知られている任意の数値をフォーマットできるようにするために使用します(または、引数として指定した場合でも、おそらく,
またはいずれかまたは.
10進数字を選択するためにのみ)。数千のオブジェクトを割り当てます(そのため、そのパフォーマンスパターンは複雑であり、プロファイリングが困難です)。ロケールに応じて数値をフォーマットするさまざまな方法をサポートする必要がない場合は、正規表現の使用のみを検討してください。
レールを使用しない人のために:
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
十分ではありませんか?ありがとう。
Railsの有無にかかわらず、これを行う直接的な方法は次のとおりです。
require 'active_support/core_ext/numeric/conversions'
12345.to_s(:delimited) # => "12,345"
12345.6789.to_s(:delimited) # => "12,345.6789"
その他のオプションについては、「Active Support Core Extensions-Numeric-Formatting」を参照してください。
ActiveSupport::NumberHelper.number_to_delimited
、同様に使用できます。この回答は、さらに多くの賛成票を投じる価値があります。
はい、NumberHelperを使用します。あなたが探しているメソッドはnumber_with_delimiterです。
number_with_delimiter(98765432.98, :delimiter => ",", :separator => ".")
# => 98,765,432.98
ビューの外にコンマを追加し、一部のモジュールを含めたくない場合は、number_to_delimitedメソッドを使用できます(railsバージョン> = 4.02)。例えば:
#inside anywhere
ActiveSupport::NumberHelper.number_to_delimited(1000000) # => "1,000,000"
上記で暗示されていないため、FYIだけでなく多くのことを行う場合、Railsにはnumber_with_delimiter
メソッドの適切なデフォルトがあります。
#inside controller or view
number_with_delimiter(2444323.4)
#=> 2,444,323.30
#inside console
helper.number_with_delimiter(233423)
#=> 233,423
最も一般的な方法でデリミタ値を指定する必要はありません。
小数を処理するレールを使用しない場合のより良い方法:
parts = number.to_s.split('.')
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
parts.join('.')
別の区切り文字が必要な場合は、正規表現の最後の「、」を変更してください。
おまけとして、これは正規表現が機能する方法です:
\\1
。\\1
なっ\1
評価すると正規表現の最初のキャプチャグループに一致しています。この正規表現では、です(\d)
。(\d)(?=(\d\d\d)+)
は、数字とそれに続く3桁の1つ以上のグループに一致します。括弧の最初のセットは\1
キャプチャグループで、2番目はです\2
。そのままにしておけば、次の結果が得られます。
123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
これは、1234が一致、2345が一致、3456が一致するため、1、2、3の後にカンマを配置するためです。(\d)(?=(\d\d\d)+(?!\d))
、数字の後に3桁が続き、その後に数字が一致しないことを意味します。これが機能する理由は、gsubが文字列に一致するものを置換し続けるためです。最初の一致のみを置き換える場合、123456789のような数値の場合、123456,789になります。123456,789はまだ正規表現と一致しているため、123,456,789が得られます。これが私がコードを入手した場所です:https : //github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
そして、ここで私はその正規表現で何が起こっているかについて学びました:http : //www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
ヘルパーを使用しない別のソリューション:小数点以下2桁でフォーマットし、を置き換えます。沿って 、
puts(("%.2f" % 2.5666).gsub('.',','))
>> 2,57
def add_commas(numstring)
correct_idxs = (1..100).to_a.select{|n| n % 6 == 0}.map{|n| n - 1}
numstring.reverse.chars.join(",").chars.select.with_index{|x, i| i.even? || correct_idxs.include?(i)}.join.reverse
end
これがルビーの私のやり方でした
加算編集:基本的に、数値の間にすべてのコンマを追加し、インデックス+ 1%6の数値のみを選択します
私は100までのカンマで結構だと思ったが、もし超長い数が欲しいのなら100をもっと大きな数にしてください
新しい構文
number_with_delimeter(@number, delimeter: ",")
あなたがお金のためにデリミターを使いたいなら、あなたはそうすることができます
number_to_currency(@number)
これも追加され$
ます。あなたがmoney
gem を使っているなら、あなたはそうすることができます
Money.new(@number,"USD").format
これも入れ$
ます。
ActionView::Helpers::NumberHelper
内に含めることで、モジュールから使用できるはずです。