<分区>
我正在尝试打印出从 11 到 30 的整数乘以 0.015
for ( let i = 11; i <= 30; i++ ) {
console.log( `${i} * 0.015 = ${i * 0.015}` );
}
我希望输出看起来像这样:
11 * 0.015 = 0.165
12 * 0.015 = 0.18
13 * 0.015 = 0.195
14 * 0.015 = 0.21
15 * 0.015 = 0.225
16 * 0.015 = 0.24
17 * 0.015 = 0.255
18 * 0.015 = 0.27
19 * 0.015 = 0.285
20 * 0.015 = 0.3
21 * 0.015 = 0.315
22 * 0.015 = 0.33
23 * 0.015 = 0.345
24 * 0.015 = 0.36
25 * 0.015 = 0.375
26 * 0.015 = 0.39
27 * 0.015 = 0.405
28 * 0.015 = 0.42
29 * 0.015 = 0.435
30 * 0.015 = 0.45
相反,我得到了这个:
11 * 0.015 = 0.16499999999999998
12 * 0.015 = 0.18
13 * 0.015 = 0.195
14 * 0.015 = 0.21
15 * 0.015 = 0.22499999999999998
16 * 0.015 = 0.24
17 * 0.015 = 0.255
18 * 0.015 = 0.27
19 * 0.015 = 0.285
20 * 0.015 = 0.3
21 * 0.015 = 0.315
22 * 0.015 = 0.32999999999999996
23 * 0.015 = 0.345
24 * 0.015 = 0.36
25 * 0.015 = 0.375
26 * 0.015 = 0.39
27 * 0.015 = 0.40499999999999997
28 * 0.015 = 0.42
29 * 0.015 = 0.435
30 * 0.015 = 0.44999999999999996
我查看了 StackOverflow,似乎 JavaScript 在浮点精度方面存在问题。因此,我尝试了一种将数字四舍五入到任意步长的方法:
function round( number, step ) {
const inverseStep = 1 / step;
return Math.round( number * inverseStep ) / inverseStep;
}
for ( let i = 11; i <= 30; i++ ) {
const rounded = round( i * 0.015, 0.015 );
console.log( `${i} * 0.015 = ${rounded}` );
}
而且我仍然得到与看起来奇怪的非理性小数相同的结果。