发布网友
共3个回答
热心网友
这是由电脑的浮点数运算误差造成的,这个误差是一定会存在的,不可避免。这是因为电脑无法精确地表示一个位数不确定的实数(比如说圆周率π,哪怕是把全世界的内存条都用来储存也无法完整储存),所以只能用固定的位数来近似地表示(也就是浮点数),这样就不可避免造成运算误差。要想尽可能减少这种误差,就要尽量把浮点数运算转换为整数运算,比如你题目中所说的例子可以这样来算:
6000*12/10000 = 7.2
6100*12/10000 = 7.32
6200*12/10000 = 7.44
补充说一下:并不是说只有在JavaScript中才会有这种现象,在所有程序设计语言比如C、C++、Java、Python、VB等等中都一样存在的
热心网友
在js 的计算中如果涉及到小数的运算,那结果可不要想当然了,比如 0.1+0.2 的计算 :
var num1 = 0.1;
var num2 = 0.2;
console.log(num1+num2)
如果不加思考 那回答估计是 0.3 实际上的结果是 0.30000000000000004
为什么会有这个结果呢?
首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看:
0.1==》0.1.toString(2)==》0.0001100110011(无限循环..)
0.2==》0.2.toString(2)==》0.001100110011(无限循环..)
双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的*而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。
原来如此,那怎么解决这个问题呢?我想要的结果就是 0.1 + 0.2 === 0.3 啊!!!
正确方法:
parseFloat((0.1 + 0.2).toFixed(10))
热心网友
这是JavaScript浮点运算自身机制,js自身的问题,不用想太多了。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005 .
用Number()或者 toFixed自己处理一下,看你自己爱好了。