我正在学习Ruby以获得乐趣,也用于创建网站(但这是无关紧要的)。在玩它时,我注意到一些“奇怪的”
当我用irb计算4.21 + 5时,它回答9.21(很奇怪,对吧?)
当我计算4.23 + 5时,它给出9.23(哇,这绝对是奇怪的)。
当我输入4.22 + 5时,它会回答9.21999 ......(等等......这真的很奇怪)。
因此我的问题是:发生了什么? 我理解这种行为与分裂或非常大的数字,但在这个简单的情况下.... ???
这是否意味着我无法使用Ruby开发会计应用程序? 是否有补丁或其他东西需要应用? (对我的大脑,最有可能)
答案 0 :(得分:5)
您应该阅读计算机中的浮点表示。 This guide是一个很好的起点。这是它的缺点:
因为在内部,计算机使用a 格式(二进制浮点) 无法准确表示一个数字 像0.1,0.2或0.3一样。
编译代码时 解释,你的“0.1”已经存在 四舍五入到最接近的数字 格式,这导致一个小的 甚至在之前的舍入错误 计算发生了。
顺便说一下,我不确定你为什么认为4.21 + 5 = 9.21或4.23 + 5 = 9.23很奇怪。如果你认为它很奇怪,因为一个文字是一个整数,一个是浮点数,最终是一个浮动响应,这就是Ruby和其他一些语言处理数字类型差异的方式。如果Ruby降低了你的浮点数的精度并且只返回一个整数(9),那么它就不会很方便,所以任何整数文字都会被有效地改为浮点数。
至于在财务应用程序中使用浮点数,请查看Developing financial application。主要的内容是使用Decimal对象与Float。
答案 1 :(得分:1)
http://ruby-decimal.rubyforge.org/
这是你想在ruby中做可靠的浮点数学的包。 Developint Financial Applications链接没有引用它,但它使得在数据库中使用Decimal数据类型变得非常重要。
注意到这一点,因为对我来说这是不明显的:)