JavaScript整数除法导致浮点,是否可能舍入错误?

问题描述 投票:1回答:2

[我知道1.005*100 / 100之类的示例在JavaScript中产生的结果有点不准确(100.49999999999999),这是浮点设计所固有的。

我的问题是看是否可以在不使用字符串操作的情况下产生可靠的十进制舍入例程。

x是整数,x / 100(int / int = float)会不会产生视觉误差? (即..000001..99999)证明这一点的示例将更可取。

如果答案为是,那么可靠地将小数点向JavaScript中的左侧移动的唯一方法是使用字符串操作(即MDN's Math.round10),并采取适当的性能打击措施。

javascript floating-point
2个回答
0
投票

根据此测试,整数除以整数没有错误。

Math.round10

不错。这意味着无需字符串即可创建健壮的舍入到十进制例程。 :-)


0
投票

为精确起见,小数部分仅在无限精度上保持相同,而与JS IEEE-754兼容的浮点算法则没有。

以有限的精度,您可能无法精确地以浮点数表示整数(例如,许多整数> 2 ^ 53)。用var multipliers = [10, 100, 1000, 10000, 100000, 1000000] for(var i = 0; i < 100000; i++) { multipliers.forEach(function (mul) { var x = i / mul if(x != x.toFixed(6)) document.write('found one! ' + i + ' / ' + mul + ' = ' + x + '<br/>') }) } document.write('done!')除以​​x时,实际上可以得到一个数学上不等于100的数字。

例如让x / 100在IEEE 754双精度中,x = 1.0e23舍入为x然后99999999999999991611392

但是由于该数字不能以双精度表示,因此四舍五入为x / 100 = 999999999999999916113.92

© www.soinside.com 2019 - 2024. All rights reserved.