Ruby Float转换为分数

时间:2016-11-07 16:23:20

标签: 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

IMO:这不是this question的副本,因为我知道浮动没有被破坏。

1 个答案:

答案 0 :(得分:11)

使用round

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

正如评论中所讨论的,有一种更好的方法来处理这些字符串 - BigDecimal class

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

这与大数字相关:

input = '1000000000000001'

(input.to_f * 100).round
#=> 100000000000000096

(BigDecimal.new(input) * 100).round
#=> 100000000000000100