1
我有一個數值輸入,其步伐爲0.01,Knockout「監視」並且Knockout.validation插件也檢查該值。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;
或者我應該有一個範圍檢查?
你的修復也會允許'step = 0.011'。那是問題嗎? – usr2564301
該步驟不會改變,我相信Knockout.Validation之前不支持超過2個小數位(通過查看代碼)。 – Ivan
您是否獲得了浮點錯誤的值?對照合理的* epsilon *進行測試可能就足夠了:'Math.abs((val * 100)%(step * 100))<0.000001'(或其附近)。它需要「abs」,因爲你的論點可能是負面的。 – usr2564301