考虑以下代码,该代码旨在将数字四舍五入到最接近的百分之一并将结果序列化为 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
...但这并不能解决在序列化过程中强制精度级别的普遍愿望。