0
我看到下面的代码docs for the BigDecimal class:是否需要使用BigDecimal.new方法?
同理:
(::new(“1.2”) - BigDecimal(“1.0”)) == BigDecimal(“0.2”) -> true (1.2 - 1.0) == 0.2 -> false
所以我在想,如果这里有必要使用new
方法是这样的:BigDecimal.new 2.5, 2
。还是仅仅使用BigDecimal 2.5, 2
就是不好的做法?当评估相同BigDecimal值,他们都得到新的引用:
BigDecimal 2.5, 2
#=> #<BigDecimal:7ffa93e524b0,'0.25E1',18(36)>
BigDecimal 2.5, 2
#=> #<BigDecimal:7ffa97236600,'0.25E1',18(36)>
感谢您的快速回答。我还发现了一个更简单的方法来初始化BigDecimals(我在spec-tests中有很多它们)。 '0.01.to_d(2)' – loybert
@loybert在这里要小心,因为你刚刚开始使用浮点数,所以在转换为BigDecimal之前,可能已经失去了精度。 –
@AndrewMarshall我试图用最小的例子'1.2 - 0.2 == 0.2#=> false'来挑衅一个数字错误,它会像'1.2.to_d - 0.2.to_d == 0.2.to_d#=> true'一样工作。任何其他想法或情景,这将失败,我的处理?我只使用这种语法,当我将值引入算法时,所以精确计算的BigDecimal将与其他BigDecimal一致计算,并且不会由于内部类型转换为精确的float('#BigDecimal * BigDecimal => BigDecimal','#BigDecimal * float => float')。 – loybert