gpt4 book ai didi

javascript - 如何从 float 取模?

转载 作者:行者123 更新时间:2023-12-03 11:29:01 25 4
gpt4 key购买 nike

我有两个带小数的输入 #input_a 和 #input_b:

<input id="input_a" name="input_a" step="any" type="number">
<input id="input_b" name="input_b" step="any" type="number">

<a href="javascript:checkForm();">Save</a>

和js:

function checkForm(i){
var a = $('input#input_a').val().replace(',','.');
var b = $('input#input_b').val().replace(',','.');
var send = true;

if(parseFloat(a) % parseFloat(b) != 0){
$('#formerror).html('Invalid');
send = false;
}

if(send==true) {
$('#form').submit();
}
}

但例如对于值 input_a = 2、input_b = 0.1

parseFloat(a) % parseFloat(b) = 0.09999999999

并给我一个错误。怎样才能做得这么好?

最佳答案

JavaScript 使用 binary floating point数字的表示。因此,内部表示 0.1 只是十进制值的近似值。这与 0.1 + 0.2 产生 0.30000000000000004 的原因相同。

因此,虽然 2 可以被 0.1 整除,但它不能被运行时的内部近似值 0.1 完美整除。

解决这个问题的一种方法是检查非常接近除数,而不是完美除数:

// note +value is shorthand for parseFloat(value)
var a = +$('input#input_a').val().replace(',','.'),
b = +$('input#input_b').val().replace(',','.'),
epsilon = 1e-10, // some very small value
mod = a % b;

if(mod < epsilon || b - mod < epsilon){
$('#form').submit();
} else {
$('#formerror).html('Invalid');
}

关于javascript - 如何从 float 取模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com