2016-08-03 54 views
3

嗨即时试图扣除2个十进制数字,它不断返回一些奇怪的数字。扣除2个十进制数字javascript

var x = 0.00085022 
var y = 0.00085050 
var answer = x - y 
alert(answer) 

这是它的返回-2.8000000000007186e-7

+0

可能的重复[格式编号为始终sho w 2位小数](http://stackoverflow.com/questions/6134039/format-number-to-always-show-2-decimal-places) –

+0

请看看这里[如何处理浮点数精度在JavaScript?](http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript) – choz

+0

http://www.2ality.com/2012/ 03/displays-numbers.html –

回答

1

你有更大数量减去和计算穿越到一个更低的数目。是-2.0更低,小数位精度达到指数级更高。

如果我们圆起来,我们得到:

var x = 85022 
var y = 85050 
var answer = x - y 
alert(answer); // = -28 
2

小数的最大数量为17,但浮点运算并不总是100%准确 http://www.w3schools.com/js/js_numbers.asp

试试这个:

var x = 0.00085022 * 100000000; 
var y = 0.00085050 * 100000000; 
var answer = (x - y)/100000000; 
alert(answer); 
+4

请记住,除了'100000000'之外,您可以乘以'0.000000001',这是一个比较便宜的计算。但是,一如既往,为了代码清晰起见,在性能成为问题之前,这种改进不应成为问题。 –