我是Ruby新手,所以我先为我的无知道歉:)我在总计一个客户的帐户时发现了一个问题。有些金额是小数点的负数,这会破坏总数。这是一些简单的示例代码......
testnum = 0.00
puts "###Debug### testnum = #{testnum} (after 0.00)"
testnum += 5.00
puts "###Debug### testnum = #{testnum} (after 5.00)"
testnum += 3.33
puts "###Debug### testnum = #{testnum} (after 3.33)"
testnum += -1.00
puts "###Debug### testnum = #{testnum} (after -1.00)"
testnum += -2.22
puts "###Debug### testnum = #{testnum} (after -2.22)"
结果......
###Debug### testnum = 0.0 (after 0.00)
###Debug### testnum = 5.0 (after 5.00)
###Debug### testnum = 8.33 (after 3.33)
###Debug### testnum = 7.33 (after -1.00)
###Debug### testnum = 5.109999999999999 (after -2.22)
因此在添加-2.22后testnum已损坏,但添加-1.00很好。不确定我做错了什么。
答案 0 :(得分:2)
来自http://floating-point-gui.de/basic/
为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?
因为在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。
如果你真的需要你的结果准确加起来,特别是当你使用钱时:使用特殊的十进制数据类型。
在Ruby中,这是BigDecimal
答案 1 :(得分:1)
Panic上校对于推理是正确的,我不想重复相同,另外你可以使用圆形功能。例如:
1.9.3p194 :001 > 5.109999999999999.round(2)
=> 5.11
因为你只使用最多2个十分之一的数字,这对你有用