【问题标题】:Float round bug in ruby?红宝石中的浮动圆形错误?
【发布时间】:2012-01-05 12:09:36
【问题描述】:
ruby-1.8.7 > 1.55.round(1)
 => 1.6 
ruby-1.8.7 > 1.555.round(2)
 => 1.56 
ruby-1.8.7 > 1.155.round(2)
 => 1.16 
ruby-1.8.7 > 10.156.round(2)
 => 10.16
ruby-1.8.7 > 10.155.round(2)
 => 10.15 
ruby-1.8.7 > 10.165.round(2)
 => 10.16

什么给了?我错过了什么吗?

编辑

ruby-1.9.2 > 10.155.round(2)
 => 10.15 
ruby-1.9.2 > 10.165.round(2)
 => 10.16

【问题讨论】:

标签: ruby floating-point rounding


【解决方案1】:

浮点值不精确。您的 10.165 在纸上/屏幕上表示为 10.165,但在内存中,它表示为非常接近 10.165 的值...是否向上或向下舍入取决于错误恰好落在哪个方向。

如果您需要准确处理小数,您可以将它们表示为 BigDecimal(使用小数刻度/精度表示法)或 Rational(使用小数分子/分母表示法)。

【讨论】:

    【解决方案2】:

    Python 文档很好地解释了二进制浮点数的基本限制:http://docs.python.org/tutorial/floatingpoint.html

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多