在JSON中传递美元金额的最佳做法是什么?
将金额作为字符串或浮点数传递?或其他?
我们有点担心在客户端(iOS/Android/Web)上显示的舍入错误,或者可能在一个客户端上显示的不同值与另一个客户端相比.
我打算创建一个包含金额的API.我想知道最佳做法是什么,或者某人是否对某些格式有一些好的或坏的经历.
我见过以下两种可能性:
我要在这两者之间来回走动.所以我出去查看其他API使用的内容,并提出以下列表:
因此,在18个采样的API中,4个使用次要单位,13个使用基本单位,1个使用难以理解的混合物.在13个使用基本单位的人中,10个是以引用的字符串形式传输它们,3个是不带引号的小数字(如果你看Intuit则实际为2个半).
我个人觉得不得不解析像"8.20"之类的字符串,因为如果你解析它会变成"8.19999999 ......"如果你错误地使用了浮点数.所以我倾向于只发送整数.但我不认为这是一个很好的论点,我发现通常API倾向于将基本单位作为字符串.
你对每种格式有什么好的论据吗?
我正在尝试为属性定义 JSON 模式
money: 12.12
Run Code Online (Sandbox Code Playgroud)
我主要关心的是应该允许最多 2 个小数位。我最初定义这个领域的尝试是
money: {
type: 'number',
minimum: 0,
multipleOf: 0.01
}
Run Code Online (Sandbox Code Playgroud)
然而,由于浮点不精确,这失败了。例如,使用 tv4 验证器,数字 147.41 通过验证,但 147.42 失败。是否有另一种方法来定义最多只允许 2 个小数位的数字类型?
似乎“格式”属性的目的是实现这些类型的限制,但如果我像这样定义字段:
money: {
type: 'number',
format: 'currency',
minimum: 0
}
Run Code Online (Sandbox Code Playgroud)
那么如何指定具有“货币”格式的字段最多只允许 2 个小数位?