引用BigDecimal类的文档,



我对以下与BigDecimal相关的输出感到困惑。

require 'bigdecimal'
BigDecimal.new('1').precs # => [9, 18]
BigDecimal.new(1).precs   # => [9, 27]

我无法弄清楚为什么传递String时,与传递Fixnum时相比,有效数字的最大位数要少。

还会导致任何精度问题吗?

最佳答案

如果您可以阅读C代码,则可以从https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.c#L2509开始-这是任何BigDecimal对象的初始化程序。如果将代码跟随到下一个方法BigDecimal_new,您将注意到,传递整数参数时,与传递字符串参数时相比,在分配和创建内部大十进制对象之前还需要执行更多步骤。

无论如何,您都不必担心精度下降-有效数字属性更像是提示而不是绝对值。甚至文档也提到了这一点:
The actual number of significant digits used in computation is usually larger than the specified number.

关于ruby - 在Ruby的BigDecimal中使用String还是Integer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34348379/

10-15 13:50