0

在下面的代码段中,浮点错误是由相乘,并通过10在哪些情况下乘法和除法不能解决浮点错误?

除以没有一个解决了乘法和除法z的值出来作为0.30000000000000004代替0.3

的方法“似乎”是不理想:

  • 它对于每一个数字计算额外的开销。
  • 额外的计算会导致额外的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>

问题:

  • 能否开发商盲目地用这个地方浮动点使用的所有情况?
  • 有没有这种情况下,这种乘法和除法方法不会解决浮动错误?
+2

那如何解决任何问题?无论如何,你究竟想要解决什么问题? – Amit

+1

您将不得不接受浮点有四舍五入错误。你得到正确*输出的事实并不意味着很多,你仍然有四舍五入的错误,但是它们太小而不显示。你很幸运。 –

+0

@RudyVelthuis是'.toFixed'与'parseFloat'最好的[解决](http://stackoverflow.com/questions/34390608/in-which-cases-multiply-and-divide-will-not-solve-floating - 点 - 错误?noredirect = 1#comment56522886_34390697)? – xameeramir

回答

1

为什么不使用.toFixedparseFloat以及一些精度。

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);

+0

这看起来很完美,最少的代码。有关它如何消耗CPU **的任何建议?我可以安全地将它用于**所有**浮点使用吗? – xameeramir

+0

我想说的是,在这两种情况下,CPU利用率几乎相同,但这样做会更加精确和准确。 – void

+0

并且它可以全局用于所有浮点事例吗? – xameeramir

相关问题