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数据进行处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容