我收到以下网络服务电话的回复:
response = "{\"price\":39.74000000000000198951966012828052043914794921875}"
然后我正在解析它:
json = JSON.parse(response, {:symboize_names: true})
结果是:
json = {price: 39.74}
然后我尝试从Rails控制台检查它是否因为JSON
库而发生,但只是我得到了以下结果:
>> data = {:price => 39.74000000000000198951966012828052043914794921875}
{:price=>39.74}
因此它是Rails中的默认行为,我需要更改它(在应用程序级上)以始终将十进制数分析为BigDecimal
而不是float
。
Ruby = 2.3.0
Rails = 4.2.4
有人可以帮忙吗?
答案 0 :(得分:1)
解决方案确实是黑客攻击,但我找不到更好的
response = "{\"price\":39.74000000000000198951966012828052043914794921875}"
transformed_response = response.gsub(/\d+\.\d+/, '"\&"')
hash = JSON.parse(transformed_response , symboize_names: true})
结果hash
将是
{ price: "39.74000000000000198951966012828052043914794921875" }
你可以用它来做这样的事情
hash.tap { |hash| hash[:price] = BigDecimal.new(hash[:price]) }