Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 简单算法的红宝石数字精度_Ruby_Math_Precision_Floating Accuracy - Fatal编程技术网

Ruby 简单算法的红宝石数字精度

Ruby 简单算法的红宝石数字精度,ruby,math,precision,floating-accuracy,Ruby,Math,Precision,Floating Accuracy,我学习Ruby是为了好玩,也是为了创建网站(但这并不重要)。在玩它的时候,我注意到一些“奇怪的东西” 当我用irb计算4.21+5时,它的答案是9.21(奇怪,对吧?) 当我计算4.23+5时,它给出了9.23(哇,这确实很奇怪) 当我输入4.22+5时,它的答案是9.21999。。。(等等!真奇怪) 因此我的问题是:发生了什么? 我理解除法或大数的这种行为,但在这个简单的例子中 这是否意味着我不能用Ruby开发会计应用程序? 是否有修补程序或其他应用程序?(对我的大脑来说,很可能)你应该仔细阅

我学习Ruby是为了好玩,也是为了创建网站(但这并不重要)。在玩它的时候,我注意到一些“奇怪的东西”

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

当我计算4.23+5时,它给出了9.23(哇,这确实很奇怪)

当我输入4.22+5时,它的答案是9.21999。。。(等等!真奇怪)

因此我的问题是:发生了什么? 我理解除法或大数的这种行为,但在这个简单的例子中


这是否意味着我不能用Ruby开发会计应用程序?
是否有修补程序或其他应用程序?(对我的大脑来说,很可能)

你应该仔细阅读计算机中的浮点表示法。这是一个很好的开始。以下是它的短处:

因为在内部,计算机使用 格式(二进制浮点)为 不能准确地表示一个数字 比如0.1、0.2或0.3

当代码被编译或 已解释,您的“0.1”已 四舍五入到该表中最接近的数字 格式,这将导致 舍入误差甚至在 计算发生了

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


至于在金融应用程序中使用浮点数,请查看。主要的技巧是使用十进制对象与浮点对象。

你应该了解计算机中的浮点表示法。这是一个很好的开始。以下是它的短处:

因为在内部,计算机使用 格式(二进制浮点)为 不能准确地表示一个数字 比如0.1、0.2或0.3

当代码被编译或 已解释,您的“0.1”已 四舍五入到该表中最接近的数字 格式,这将导致 舍入误差甚至在 计算发生了

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

至于在金融应用程序中使用浮点数,请查看。主要方法是使用十进制对象与浮点对象。

这是您希望在ruby中进行可靠浮点运算的软件包。DevelopPint Financial Applications链接没有引用它,但它强调了在数据库中使用十进制数据类型的重要性

注意这一点,因为这对我来说并不明显:)

这是您希望在ruby中进行可靠浮点运算的软件包。DevelopPint Financial Applications链接没有引用它,但它强调了在数据库中使用十进制数据类型的重要性


注意这一点,因为这对我来说并不明显:)

4.21+5=9.21有什么问题?“这是否意味着我不能用Ruby开发会计应用程序?”不。Ruby是一种很好的语言,但你必须知道在计算时使用什么数字类型,在其他语言中也是如此。@thetinman:你说得对。.只是我对浮点表示不太了解,也不知道在Ruby中有什么替代浮点的方法。现在BeepDog给出了一个十进制包的解决方案@安德鲁:别以为是复制品。两者都是关于浮点表示的,但这个问题也会引起开发金融应用程序的问题——另外,对于更简单的计算来说,二进制的1/10是0.0(0011),括号中的术语是重复的数字。尝试将1/7的整个值写成十进制,然后我们再讨论。:)4.21+5=9.21有什么问题?“这是否意味着我不能用Ruby开发会计应用程序?”没有。Ruby是一种很好的语言,但你必须知道在计算时使用什么数字类型,在其他语言中也是如此。@thetinman:你说得对。.只是我对浮点表示不太了解,也不知道在Ruby中有什么替代浮点的方法。现在BeepDog给出了一个十进制包的解决方案@安德鲁:别以为是复制品。两者都是关于浮点表示的,但这个问题也会引起开发金融应用程序的问题——另外,对于更简单的计算来说,二进制的1/10是0.0(0011),括号中的术语是重复的数字。尝试将1/7的整个值写成十进制,然后我们再讨论。:)谢谢你的链接!我过去使用过一些其他语言,这是我第一次在这么小的数字上看到这种行为。。。有办法解决这个问题吗?我的意思是,如果我想为一名会计师开发一个程序,肯定有什么地方可以阻止…@user614167-我更新了我的答案,加入了财务软件的信息。顺便说一句,这不是一个只有Ruby的场景。任何使用IEEE 754浮点标准的语言都会遇到同样的问题。你一定很幸运我的朋友:啊,总的来说我是个幸运的人。看到了吗。。?我甚至在不到10分钟的时间里从你那里得到了一个很好的答案!谢谢McStretch。。。附言:我认为4.21+5=9.21或4.23+5=9.23并不奇怪。我只是在制造悬念。我失败了,我不会再做了,我保证…:)哈哈,是的。请记住,展望未来,在考虑在金融应用程序中使用浮点实现时,您应该警惕任何语言