我想转换" 5565.80"到5565.80和" 5565.00"到5565.00。 to_f
的问题在于,当2位小数为.00
时,它会删除最后的0。有两种方法可以做到吗?
答案 0 :(得分:2)
您可以将“5565.80”转换为浮动:
value = "5565.80".to_f
# 5565.8
然后用两位小数显示该值:
'%.2f' % value
# "5565.80"
浮点数在Ruby中具有双精度,因此您的值实际上是:
5565.800000000000181898940354...
作为花车,您无法准确保存5565.80
。
如果您想要精确值(例如货币),您可以使用整数作为分数:
"5565.80".delete('.').to_i
# 556580
当您需要相应的浮动时,可以将其除以100.0
。
如果您正在使用数据库,则可以使用decimal(20,2)
或类似的东西。
您也可以使用BigDecimal
:
require 'bigdecimal'
BigDecimal.new("5565.80")
它会保存确切的值,但会比int或float慢得多。
答案 1 :(得分:0)
您可以使用#round
。
round的参数是要舍入的小数位数。一些例子:
5565.80.round(2) # => 5565.8 # omits trailing 0's
5565.00.round(2) # => 5565.0 # only keeps the decimal to show that this is a float
5565.79.round(2) # => 5565.79 # rounds to two digits
5565.123.round(3) # => 5565.123 # rounds to three decimal places, so nothing is lost
5565.123.round(2) # => 5565.12 # drops the 3
5565.129.round(2) # => 5565.13 # drops the 9 and rounds up