ed1*_*d1t 48 ruby math currency ruby-on-rails decimal
我正在处理货币,我想将数字向下舍入到小数点后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
Run Code Online (Sandbox Code Playgroud)
jvn*_*ill 97
除了mcfinnigan的答案,您还可以使用以下内容获得2位小数
'%.2f' % 500 # "500.00"
Run Code Online (Sandbox Code Playgroud)
此用例称为字符串格式运算符
Ste*_*fan 40
由于您使用的是Rails,这似乎与视图有关,因此有number_with_precision
:
number_with_precision(500, precision: 2)
#=> "500.00"
I18n.locale = :de
number_with_precision(500, precision: 2)
#=> "500,00"
Run Code Online (Sandbox Code Playgroud)
对于我建议的货币number_to_currency
:
number_to_currency(500)
#=> "$500.00"
Run Code Online (Sandbox Code Playgroud)
mcf*_*gan 30
这是一个提示.500.00是数字500.0的代表
具体来说,sprintf将帮助您:
irb(main):004:0> sprintf "%.2f", 500.0
=> "500.00"
Run Code Online (Sandbox Code Playgroud)