Ruby编号精度与简单算术

Phi*_*ilo 0 ruby math precision floating-accuracy

我正在学习Ruby以获得乐趣,也用于创建网站(但这是无关紧要的).在玩它时,我注意到一些"怪异"的东西

当我用irb计算4.21 + 5时,它回答9.21(很奇怪,对吧?)

当我计算4.23 + 5时,它给出了9.23(哇,这绝对是奇怪的).

当我输入4.22 + 5时,它会回答9.21999 ......(等等......这真的很奇怪).

因此我的问题是:发生了什么?我理解这种行为与分裂或真正的大数字,但在这个简单的情况下.... ???

这是否意味着我无法使用Ruby开发会计应用程序?是否有补丁或其他东西需要应用?(对我的大脑,最有可能)

McS*_*tch 5

您应该阅读计算机中的浮点表示.本指南是一个很好的起点.这是它的缺点:

因为在内部,计算机使用的格式(二进制浮点)无法准确地表示0.1,0.2或0.3之类的数字.

编译或解释代码时,"0.1"已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小的舍入误差.

顺便说一句,我不确定为什么你认为4.21 + 5 = 9.21或4.23 + 5 = 9.23是奇怪的.如果你认为它很奇怪,因为一个文字是一个整数,一个是浮点数,最终是一个浮动响应,这就是Ruby和其他一些语言处理数字类型差异的方式.如果Ruby降低了你的浮点数的精度并且只返回一个整数(9),那么它就不方便了,所以任何整数文字都有效地改为浮点数.

至于在财务应用程序中使用浮点数,请查看开发财务应用程序.主要内容是使用Decimal对象与Float.

  • @ user614167 - 我更新了我的答案,包括有关财务软件的信息.顺便说一下,这不是仅限Ruby的场景.任何使用IEEE 754浮点标准的语言都会遇到同样的问题.你一定很幸运我的朋友:D (2认同)