【发布时间】:2016-10-28 06:21:55
【问题描述】:
我无法将我的 ruby 对象序列化为 json,更具体地说是数字的格式。 我编写了一个 rspec 测试来更准确地说明我的问题。
expected = '{ "foo": 1.00, "bar": 4.50, "abc": 0.00, "xyz": 1.23 }'
it 'serializes as expected' do
my_hash = { "foo": 1, "bar": 4.5, "abc": 0, "xyz": 1.23}
expect(my_to_json_method(my_hash)).to eq expected
end
这是我遇到麻烦的情况。我可以使用 sprintf 但如何获得如上例所示的字符串输出?
【问题讨论】:
-
请试试这个,
test = { "foo": (sprintf "%.2f","1.0"), "bar": (sprintf "%.2f","4.50"), "abc": (sprintf "%.2f","0") } -
这些值的输出是字符串。所以格式化有效,但我希望结果不是结果中引用的字符串。
-
@mcbain83 你想存储货币价值吗?
-
是的,那是正确的.. 我不确定这种行为在 json 字符串中是否那么重要.. 但我仍然想看看现在这是否可能。
-
警告:顾名思义,浮点数没有固定的精度。如果您想要精确的值,这对金钱尤其很重要,请改用BigDecimal。 请勿使用浮点数进行货币计算。浮点数是一个值的精确近似,而不是一个值的精确表示。如果您使用 JSON 进行传输,我强烈建议您使用一个足够小的单位,这样您就不需要分数了,例如美分与美元。
标签: json ruby number-formatting