我有一个数字输入,步长为0.01,被Knockout“监视”并且Knockout.validation插件也会检查该值。
在测试输入以确保它提供适当的错误消息时,我发现某些输入将导致验证消息。例如,值-0.14将导致错误:“值必须递增0.01”。
违规的Knockout.Validation代码是:
return utils.isEmptyVal(val) || (val * 100) % (step * 100) === 0;
对于val = -0.14
step = 0.01
,浮点运算导致此行返回false,这意味着Knockout.Validation将-0.14
视为无效输入。这只是一个例子,有很多情况会发生这种情况。对于-0.14
案例,(val * 100) % (step * 100)
的结果为-1.7763568394002505e-15
。
我可以通过简单的方法修补此代码吗?以下是否足以满足所有情况:
return utils.isEmptyVal(val) || parseInt(val * 100) % parseInt(step * 100) === 0;
或者我应该进行范围检查吗?
答案 0 :(得分:0)
在类似的情况下,我发现this issue中的代码解决了我的问题。
有问题的核心代码与您提出的解决方案非常相似,尽管我认为有充分的理由使用parseFloat而不是parseInt。