用户输入字符串'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的副本,因为我知道浮动没有被破坏。
答案 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