Ruby中BigDecimal to_json問題

Ruby提供了一種BigDecimal類型。BigDecimal專門用于處理高精度的浮點數運算,在運算過程中不會丟失浮點數的精度。BigDecimal特別適合用于處理對錢的運算。

但是BigDecimal類型如何做json序列化?

這是一個值得討論的問題, 例如下面代碼:

require 'bigdecimal'
require 'json'
{
    price: BigDecimal.new('10000.000001')
}.to_json

price 會被序列化成string, 而不會是numeric:

{"price":"0.10000000001E5"}

為什么不會是numeric ?

如果我們將price:BigDecimal作為numeric傳輸后,在某些語言中,或者json庫中,會將price當做float或者double類型進行from_json. 此時很有可能會丟失price數據的精度。

為了使BigDecimal數據在傳輸的過程中不會造成數據精度的損失,ruby會采用string類型對BigDecimal進行序列化。當客戶端接受到string數據后,手動對price數據進行處理。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容