gpt4 book ai didi

ruby - 将数字的 JSON 序列化强制到特定精度

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:07 25 4
gpt4 key购买 nike

考虑以下旨在将数字四舍五入到最接近的百分之一并将结果序列化为 JSON 的代码:

require 'json'
def round_to_nearest( value, precision )
(value/precision).round * precision
end
a = [1.391332, 0.689993, 4.84678]
puts a.map{ |n| round_to_nearest(n,0.01) }.to_json
#=> [1.3900000000000001,0.6900000000000001,4.8500000000000005]

有没有一种方法可以使用 JSON 以特定精度级别序列化所有数字

a.map{ ... }.to_json( numeric_decimals:2 )
#=> [1.39,0.69,4.85]

这可以使用 Ruby 内置的 JSON 库或其他 JSON gem。

编辑:正如下面对答案的评论中所指出的,我正在为包含数字的任意数据(而不是具体的平面数字数组)寻找所有 JSON 序列化的通用解决方案。


请注意,在这种特定情况下,可以通过重写方法来解决上述问题:

def round_to_nearest( value, precision )
factor = 1/precision
(value*factor).round.to_f / factor
end

...但这并没有解决在序列化过程中强制精度级别的普遍愿望。

最佳答案

我只是使用 ruby​​ 的内置舍入方法对其进行预舍入:http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round

a.map{ |n| n.round(2) }.to_json

这对我来说看起来很干净,而不是获取所有类型的自定义库并传入参数。

编辑评论:

我知道您可以通过 activesupport 做到这一点。

# If not using rails
require 'active_support/json'

class Float
def as_json(options={})
self.round(2)
end
end

{ 'key' => [ [ 3.2342 ], ['hello', 34.1232983] ] }.to_json
# => {"key":[[3.23],["hello",34.12]]}

更精确的解决方案:better monkey-patch

关于ruby - 将数字的 JSON 序列化强制到特定精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743835/

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