【问题标题】:Unexpected Ruby Float behavior during multiplication [duplicate]乘法期间意外的Ruby Float行为[重复]
【发布时间】:2015-12-02 06:21:38
【问题描述】:
30.0 * 0.009 # => 0.26999999999999996

有人知道为什么这不是0.27吗?

对此有何建议?

【问题讨论】:

  • 这就是浮点数的工作原理。 “我们是博格的浮子。准确性无关紧要,您将被近似”
  • 我读过。作者建议使用 BigDecimal 等。我现在正在阅读。如果你以前解决过这个问题,你会在你的代码库中做什么?我也在看“每个计算机科学家都应该知道的关于浮点运算的知识”。还有一篇比较不同语言的好文章itreallymatters.net/post/386327451/…
  • 这一切都归结为计算机无法以二进制形式准确表示 every 浮点数。因此,算术变得很奇怪。

标签: ruby


【解决方案1】:

既然您已经找到了关于为什么主题的材料,我将只回答问题的做什么部分。如果您绝对不想近似,则必须使用有理数:

30 * 0.009r # => (27/100)

【讨论】:

  • 我猜你的意思是“理性”而不是“真实”。
  • 0.009r 是一个有理数,它是实数的子集
  • @sschmeck,感谢您的更正,您是对的。
  • 这是个好主意。不过,我是在测试 Web 应用程序计算的背景下进行的。
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2014-07-24
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2019-11-16
相关资源
最近更新 更多