2016-06-28 93 views

回答

0

理论上JSON作为一个容器可以容纳高度精确的数字,但在实践中一端通常仅限于IEEE 754双精度浮点数因为这是JavaScript的本身是有限的。如果值是使用JavaScript或几乎任何JSON实现编码的,则任何精度损失都将已发生。

因此,从解析Float转换为BigDecimal几乎总是导致不精密额外损失:

data = JSON.parse("[1.025]") 
# Float can't represent decimal values precisely, so `round` fails 
data.first.round(2) # => 1.02 
# Converting to big decimal improves the precision of future operations 
BigDecimal.new(data.first.to_s).round(2).to_s # => "1.03" 

你好得多运输的高度精确的值作为字符串。

最后,如果你真的需要Ruby库总是可以猴子打补丁的行为你怎么想。