我在JavaScript中創建了數字微調控件,實質上模仿了webkit中的數字字段。JavaScript中的精確浮點運算
當您更改號碼,就需要檢查,看看是否值不僅是可接受的範圍之內,而且,它的步驟:
<input type="number" min="0" max="100" step="1" />
如果用戶輸入5.5
領域將截斷這到最接近的步驟低於值,在這種情況下是5
。
對於2
的步驟,如果用戶輸入5.5
,結果將是4
。
我打算用這個計算公式是這樣的:
...code...
_checkStep: function (val) {
val ret,
diff,
moddedDiff;
diff = val - this._min;
moddedDiff = diff % this._step;
ret = val - moddedDiff;
return ret;
},
//set elsewhere
_min,
_step,
...more code...
雖然出於測試目的,你可以簡單地使用:
function checkStep(val, min, step) {
var ret,
diff,
moddedDiff;
diff = val - min;
moddedDiff = diff % step;
ret = val - moddedDiff;
return ret;
}
這對於整數和更大的偉大工程值,但是由於JavaScript如何處理浮點數,我遇到了小數點問題。
例如:
checkStep(0.5, 0, 0.1) //returns 0.4, 0.5 is expected
在分析每行,事實證明,0.5 % 0.1
在JavaScript返回0.09999999999999998
。
可以做些什麼來使這個功能更準確*?
*準確地說,它適用於增量爲0.01
或更高。
有沒有這樣的事情「正確」浮點。它們總是盡力而爲的近似值。您至多可以指定您願意接受的精度級別。 – 2012-04-27 16:13:40
@MarcB,好點,忘了提到我有興趣把這項工作放到百分之一的地方。 – zzzzBov 2012-04-27 16:15:31
*「JavaScript中的0.5%0.1返回0.09999999999999998」。*哦,這只是冰山一角。 '0.1 + 0.2 = 0.30000000000000004'。 – 2012-04-27 16:15:45