我正在尝试为属性
定义JSON模式money: 12.12
我主要担心的是,最多允许2个小数位。我最初尝试定义这个字段是
money: {
type: 'number',
minimum: 0,
multipleOf: 0.01
}
然而,由于floating point imprecision,这失败了。例如,使用tv4验证器,数字147.41通过验证,但147.42失败。有没有另一种方法来定义一个只允许最多2位小数的数字类型?
似乎“format”属性的目的是实现这些类型的限制,但是如果我像这样定义字段:
money: {
type: 'number',
format: 'currency',
minimum: 0
}
那么如何指定具有“货币”格式的字段最多只允许2位小数?
答案 0 :(得分:2)
您的最佳选择可能会将您的货币值乘以100.然后您有整数,验证应该可以正常工作。一般来说,使用浮点来存储货币价值是一个错误的农场,所以你最好转向"整数"即使从技术上讲它们仍然是JSON中的浮点值。
某些系统使用ISO货币代码,小写的第三个字母表示此类货币。例如GBp代表英国便士,或美国代表美国便士。见https://stackoverflow.com/a/30635729/4323
答案 1 :(得分:1)
我不喜欢整数值的东西,我发现当涉及百分比之类的东西(这就是为什么其他语言具有Decimal类型的原因)时,当涉及到正确的数字舍入时,它不能解决实际问题。使用字符串和模式的解决方案:
"amount":{
"type": "string",
"pattern": "^(0{1}|([1-9]+[0-9]*))(\.[0-9]{1,2})?$",
"minLength": 1,
"description": "A Monetary Amount",
"examples": [
"0",
"0.00",
"0.05",
"19.95",
"255.5",
"120000"
]
}
如果不需要,可以删除minLength
。