通貨を扱っていますが、数値を小数点以下2桁に切り捨てます。数値が500.0であっても、一貫性を保つために500.00にしたいと思います。 「500.00」.to_dを実行すると、500.0に変換されます。
この動作を変更する良い方法は何ですか?また、この方法を使用して2桁に切り捨て、常に小数が2桁になるようにします。
def self.round_down(x, n=2)
s = x.to_s
l = s.index('.') ? s.index('.') + 1 + n : s.length
s = s[0, l]
s = s.index('.') ? s.length - (s.index('.') + 1) == 1 ? s << '0' : s : s << '.00'
s.to_f
end
Mcfinniganの答えに加えて、次を使用して小数点以下2桁を取得することもできます
'%.2f' % 500 # "500.00"
この使用例は string format operator として知られています
Railsを使用しており、これはビューに関連していると思われるため、 number_with_precision
:
number_with_precision(500, precision: 2)
#=> "500.00"
I18n.locale = :de
number_with_precision(500, precision: 2)
#=> "500,00"
推奨する通貨について number_to_currency
:
number_to_currency(500)
#=> "$500.00"
ここにヒントがあります。 500.00は数値500.0の表現です
具体的には、sprintfが役立ちます。
irb(main):004:0> sprintf "%.2f", 500.0
=> "500.00"
切り捨てる必要がありました。
他のほとんどの回答は500.016から500.02に丸められます
試行:
def self.round_down(x, n = 2)
"%.#{n}f" % x.to_d.truncate(n)
end
irb(main):024:0> x=500.0; '%.2f' % x.to_d.truncate(2)
=> "500.00"
irb(main):025:0> x=500.016; '%.2f' % x.to_d.truncate(2)
=> "500.01"