Ruby - 添加负浮点值

时间:2012-11-08 10:44:23

标签: ruby decimal add

我是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很好。不确定我做错了什么。

2 个答案:

答案 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个十分之一的数字,这对你有用