Ruby浮点转换为分

  • 本文关键字:转换 Ruby ruby
  • 更新时间 :
  • 英文 :


用户输入字符串'67.99'。我最终需要把它转换成整数6799

换句话说:将通过string输入的货币金额通过integer数据类型转换为美分。

我注意到这发生了:

('67.99'.to_f * 100).to_i
#=> 6798

非预期行为。我需要保存为6799,而不是6798

问题是浮点数乘以100:

'67.99'.to_f * 100
#=> 6798.999999999999

问题:如何正确地将作为字符串输入的小数转换为整数?

输入输出示例:

'67'    #=> 6700
'67.'   #=> 6700
'67.9'  #=> 6790
'67.99' #=> 6799

在我看来,这不是这个问题的重复,因为我知道float没有被打破。

使用round:

('67.99'.to_f * 100).round
#=> 6799

正如在注释中所讨论的,有一种潜在的更好的方法来处理这样的字符串——BigDecimal类:

(BigDecimal.new('67.99') * 100).round
#=> 6799

这与大数相关:

input = '1000000000000001'
(input.to_f * 100).round
#=> 100000000000000096
(BigDecimal.new(input) * 100).round
#=> 100000000000000100

最新更新