使用ruby-1.9.2添加错误

Sad*_*tam 7 ruby floating-accuracy ruby-1.9.2

当我添加,0.1+0.2我得到了0.30000000000000004,但当我添加相同的数字,ruby 1.8.7我得到了正确的答案0.3.我得到0.3四舍五入,但我只是想0.3ruby 1.9.2通过增加0.10.2

ash*_*ai_ 11

你需要bigdecimal来做这项工作.

(BigDecimal('0.1') + BigDecimal("0.2")).to_f

见以下链接:

http://redmine.ruby-lang.org/issues/4394

  • `"因为它是ruby的错误"` - 这不是一个错误 - 它是浮点运算的方式 - 错误报告声称这是一个错误被标记为被拒绝. (3认同)

sar*_*old 7

你的旧红宝石骗你了:

$ ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
$ irb
irb(main):001:0> printf("%40.40f\n", 0.1 + 0.2)
0.3000000000000000444089209850062616169453
=> nil
Run Code Online (Sandbox Code Playgroud)

浮点数是非常棘手的野兽.

  • 这是一个有趣的概念:它骗了你,并给了你正确的答案,它不应该这样做.浮点_is_好玩! (2认同)
  • 我使用的是ruby-1.8.7-head,而不是patchlevel. (2认同)
  • @Sadiksha Gautam,你从C :)得到了相同的答案,所以我怀疑Ruby的特定补丁级别真的很重要.真的,你可以在任何版本的Ruby,Python,C,Java等上尝试`printf("%40.40f \n",0.1 + 0.2)`; 任何使用IEEE-754浮点数的语言都会给你带来这些结果. (2认同)