美文网首页
Ruby中BigDecimal to_json问题

Ruby中BigDecimal to_json问题

作者: lvjian700 | 来源:发表于2015-07-23 23:02 被阅读771次

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

    相关文章

      网友评论

          本文标题:Ruby中BigDecimal to_json问题

          本文链接:https://www.haomeiwen.com/subject/xhxmqttx.html