Ruby将2个十进制字符串转换为数字并保留两位小数

时间:2017-03-22 19:47:30

标签: ruby

我想转换" 5565.80"到5565.80和" 5565.00"到5565.00。 to_f的问题在于,当2位小数为.00时,它会删除最后的0。有两种方法可以做到吗?

2 个答案:

答案 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

您也可以使用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