我有一个具有数字属性的对象。我希望确保该数字最多只能有2位小数。例如:1 // good 1.1 // good 1.11 // good 1.111 //bad有什么办法吗?看了Zod的文档并搜索了网页。发现如果我的属性是一个字符串,我可以很容易地做到这一点。不确定数字。
1 // good 1.1 // good 1.11 // good 1.111 //bad
tv6aics11#
z.number().multipleOf(0.01)
我会做的黑客(是的,它可以与非整数!)但是,我担心IEEE 754表示问题(它甚至有自己的名称-但我忘了-并且不是特定于JS),当
z.number().multipleOf(0.01).parse(0.1 + 0.1 + 0.1)
将抛出,因为引擎盖下的0.1 + 0.1 + 0.1变为0.30000000004也许refine()会更可靠,即使不那么严格(下面的代码使0.00000000001通过,但你可以玩右边的比较):
refine()
z.number() .refine(x => x * 100 - Math.trunc(x * 100)< 0.000000001) .parse(0.1 + 0.1 + 0.1) // ok
PS无法根据@vera提出的z.custom()评估此方法
z.custom()
1条答案
按热度按时间tv6aics11#
我会做的黑客(是的,它可以与非整数!)
但是,我担心IEEE 754表示问题(它甚至有自己的名称-但我忘了-并且不是特定于JS),当
将抛出,因为引擎盖下的0.1 + 0.1 + 0.1变为0.30000000004
也许
refine()
会更可靠,即使不那么严格(下面的代码使0.00000000001通过,但你可以玩右边的比较):PS无法根据@vera提出的
z.custom()
评估此方法