javascript - 如何将 11 到 30 之间的整数乘以 0.015?

标签 javascript precision floating-accuracy

<分区>

我正在尝试打印出从 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}` );
}

而且我仍然得到与看起来奇怪的非理性小数相同的结果。

最佳答案

浮点精度足以完成工作,您只需要对其进行舍入即可。你可以使用

.toFixed(2) 

将结果四舍五入到小数点后两位。

请注意,这会将您的结果转换为字符串(这对您正在做的事情来说很好),因此如果您转换回 float ,则会返回不准确的结果。如果你真的很担心精确值,你应该使用像 Decimal.js 这样的东西,它将数字作为字符串而不是 float 来处理。特别是如果你正在做任何事情,比如计算金钱。

关于javascript - 如何将 11 到 30 之间的整数乘以 0.015?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57684335/

相关文章:

java - π近似误差导致第29位发散

c++ - 如何确定给定的 int64_t 是否可以无损地存储在 double 中?

c++ - 类似浮点函数的不同结果

c++ - 浮点计算使用 float 的结果与使用 double 的结果不同

javascript - dojo AccordionPane onSelected 替换

javascript - 使用 GruntJs 压缩脚本

MATLAB 1/Inf 默认值?

javascript - JavaScript 中 10 + 0.5 是否等于 10.5?

javascript - 搜索 JSON 数据时取消区分大小写 : PHP

javascript - 使用 Kendo Mobile 按钮而不是处理点击有什么优势?