Knockout.Validation中的浮点舍入错误

时间:2014-05-19 20:47:30

标签: javascript floating-accuracy knockout-validation

我有一个数字输入,步长为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;

或者我应该进行范围检查吗?

1 个答案:

答案 0 :(得分:0)

在类似的情况下,我发现this issue中的代码解决了我的问题。

有问题的核心代码与您提出的解决方案非常相似,尽管我认为有充分的理由使用parseFloat而不是parseInt。