在哪些情况下乘法和除法不能解决浮点错误?
In which cases multiply and divide will not solve floating point errors?
在下面的代码片段中,浮点数错误通过乘以和除以 10 来解决。
没有乘法和除法 z 的值显示为 0.30000000000000004
而不是 0.3
。
方法"seems"不理想:
- 每个数字都有额外的计算开销。
- 额外的计算会导致额外的CPU消耗。
var x = 0.1;
var y = 0.2;
var z = (x * 10 + y * 10) / 10;
document.getElementById("demo").innerHTML = z;
<p id="demo"></p>
问题:
- 开发人员可以在所有使用浮点数的情况下盲目地使用它吗?
- 是否存在这种乘除方法无法解决浮动错误的情况?
为什么不将 .toFixed
与 parseFloat
一起精确使用。
var x = 0.1;
var y = 0.2;
function add(foo, bar, precision){
return parseFloat((foo + bar).toFixed(precision));
}
var sum = add(x, y, 1);
alert(sum);
在下面的代码片段中,浮点数错误通过乘以和除以 10 来解决。
没有乘法和除法 z 的值显示为 0.30000000000000004
而不是 0.3
。
方法"seems"不理想:
- 每个数字都有额外的计算开销。
- 额外的计算会导致额外的CPU消耗。
var x = 0.1;
var y = 0.2;
var z = (x * 10 + y * 10) / 10;
document.getElementById("demo").innerHTML = z;
<p id="demo"></p>
问题:
- 开发人员可以在所有使用浮点数的情况下盲目地使用它吗?
- 是否存在这种乘除方法无法解决浮动错误的情况?
为什么不将 .toFixed
与 parseFloat
一起精确使用。
var x = 0.1;
var y = 0.2;
function add(foo, bar, precision){
return parseFloat((foo + bar).toFixed(precision));
}
var sum = add(x, y, 1);
alert(sum);