JSON模式中的十进制精度

JSON模式中的十进制精度,json,rest,jsonschema,Json,Rest,Jsonschema,我想让我的JSON模式验证发送到RESTAPI的小数点不超过两位 从我在最新JSON模式中看到的情况来看,RFC(v4)不允许这样做。V1有一个maxDecimals验证器 有人知道为什么要把它拿出来吗 我有一个字段,当我将它存储在数据库中时,它只包含两个小数,我不想只舍入到两个小数。这将极大地改变一些用户的输入。因此,我想拒绝任何更高的精度,并迫使他们自己将其圆化 当然,我可以使用我自己编写的自定义验证器来实现这一点,但我宁愿不这样做,除非我必须这样做 在v4中是否有其他方式表示这一点 谢谢他

我想让我的JSON模式验证发送到RESTAPI的小数点不超过两位

从我在最新JSON模式中看到的情况来看,RFC(v4)不允许这样做。V1有一个maxDecimals验证器

有人知道为什么要把它拿出来吗

我有一个字段,当我将它存储在数据库中时,它只包含两个小数,我不想只舍入到两个小数。这将极大地改变一些用户的输入。因此,我想拒绝任何更高的精度,并迫使他们自己将其圆化

当然,我可以使用我自己编写的自定义验证器来实现这一点,但我宁愿不这样做,除非我必须这样做

在v4中是否有其他方式表示这一点


谢谢

他们用multipleOf(通过v3 divisibleBy)替换了它

对于小数点后2位,只需添加multipleOf:0.01。

我建议使用
{“type”:“number”,“multipleOf:0.01}而不是{“type”:“integer”,“multipleOf:0.01}


如果使用python jsonschema库,请参见

{ "type": "number", "multipleOfPrecision": 0.01 }

基于:

{
“类型”:“字符串”,
“模式”:“-?^\\d*(.\\d{0,2})?$”
}

Hmmm。。。那么不接受整数。整数5不能被0.01整除。那么您可能使用了错误的json模式验证器。您使用了哪个验证器,使用的是v3 divisibleBy还是v4 multipleOf?在模式:{“type”:“integer”,“multipleOf”:0.01}数据:5I使用Newtonsoft.Json for.NET,它只支持v3。您在示例中给出的模式应该是{“type”:“number”,“multipleOf”:0.01},以允许5.12。当我阅读NewtonSoft的文档和单元测试时,它的行为符合预期。由于浮点不精确,这是不可靠的,例如147.41将通过验证,但147.42将不会。我认为您的正则表达式将允许
42。
作为值:捕获组允许在点后保留零位小数。我认为,当给出(可选)组时,点号后面至少应该有一个小数位,因此我选择
-?^\\d*(.\\d{1,2})?$