将0.02添加到javascript中的数字会导致不正确的值
我试图以十进制间隔从一些将0.02添加到javascript中的数字会导致不正确的值,javascript,Javascript,我试图以十进制间隔从一些min到max获取一个数字数组,在本例中为0.02,例如:1.00,1.02,1.04,1.06 以下代码在编号1.14处开始中断: function getOptions(min, max, interval) { var options = []; for (var i = min; i <= max; i += interval) { options.push(i); } return options; } var options
min
到max
获取一个数字数组,在本例中为0.02,例如:1.00,1.02,1.04,1.06
以下代码在编号1.14处开始中断:
function getOptions(min, max, interval) {
var options = [];
for (var i = min; i <= max; i += interval) {
options.push(i);
}
return options;
}
var options = getOptions(1.0, 1.4, 0.02);
是什么原因导致此问题?我如何解决此问题?请参见:
在内部,计算机使用的格式(二进制浮点)根本无法准确表示0.1、0.2或0.3这样的数字
在编译或解释代码时,您的“0.1”已经四舍五入到该格式中最接近的数字,这甚至会在计算之前产生一个小的四舍五入错误
用于:
JavaScript数字实际上只是IEEE-754规定的浮点。由于在以基数2表示数字时存在不相等的情况,以及有限机器的情况,我们只能使用一种充满舍入错误的格式。本文解释了这些舍入错误以及错误发生的原因。始终使用一个好的数字库,而不是构建自己的数字库
我已经在这方面取得了一些成功,更小更快。尝试-options.push(parseFloat(I.toFixed(2))
,其中toFixed(n)
将输入转换为string
保留n
小数。@BatScream,这是我的答案。事实上,在发布问题之前,我使用了options.push(I.toFixed(2)
,但我的循环不起作用,因为它不包含在I上
[
1,
1.02,
...
1.12,
1.1400000000000001,
1.1600000000000001
...
]