typescript 有没有一种方法可以使用Zod来验证一个数字最多有2位小数?

oipij1gg  于 2023-01-31  发布在  TypeScript
关注(0)|答案(1)|浏览(184)

我有一个具有数字属性的对象。我希望确保该数字最多只能有2位小数。
例如:1 // good 1.1 // good 1.11 // good 1.111 //bad
有什么办法吗?
看了Zod的文档并搜索了网页。发现如果我的属性是一个字符串,我可以很容易地做到这一点。不确定数字。

tv6aics1

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通过,但你可以玩右边的比较):

z.number()
  .refine(x => x * 100 - Math.trunc(x * 100)< 0.000000001)
  .parse(0.1 + 0.1  + 0.1) // ok

PS无法根据@vera提出的z.custom()评估此方法

相关问题