2016-06-28 60 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庫總是可以猴子打補丁的行爲你怎麼想。