gpt4 book ai didi

json - Ruby json 库将 BigDecimal 转换为科学记数法

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:36 27 4
gpt4 key购买 nike

我需要将包含一些 BigDecimal 字段的 Ruby 哈希转换为 JSON。

我需要将 BigDecimal 转换为 float /整数,但“json”库总是将其转换为科学记数法。

require 'json'
require 'bigdecimal'

obj = {}
obj['created_at'] = BigDecimal('0.12345')

puts "JSON.dump(obj) = #{JSON.dump(obj)}"
puts "JSON.generate(obj) = #{JSON.generate(obj)}"
puts "JSON.fast_generate(obj) = #{JSON.fast_generate(obj)}"
puts "JSON.pretty_generate(obj) = #{JSON.pretty_generate(obj)}"

结果:

JSON.dump(obj) = {"created_at":"0.12345e0"}
JSON.generate(obj) = {"created_at":"0.12345e0"}
JSON.fast_generate(obj) = {"created_at":"0.12345e0"}
JSON.pretty_generate(obj) = {
"created_at": "0.12345e0"
}

是否有任何 JSON 库可以指定数字格式,以便在解析对象时,BigDecimal 字段不会转换为科学记数法?

obj['created_at'] = BigDecimal.new('0.12345')
JSON.parse(obj) = { "created_at": "0.12345" } # not 0.12345e0

我正在使用 ruby 2.4.1p111

最佳答案

BigDecimal('0.12345').to_f

应该会给你想要的结果。

更新:

JSON.parse(BigDecimal('0.12345').to_s) # => 0.12345

JSON.parse(BigDecimal('0.12345').to_s).to_s # => "0.12345"

关于json - Ruby json 库将 BigDecimal 转换为科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45421201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com