首页 热点资讯 义务教育 高等教育 出国留学 考研考公

请问javascript中60*0.12结果怎么是7.199999999999999?

发布网友

我来回答

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自己处理一下,看你自己爱好了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com