JS数字计算不精确的原因?

在控制台直接输入:

6999*0.7 // 4899.299999999999

找到一片关于这方面的文章:http://www.ruanyifeng.com/blo...

但是读了还是很不理解,涉及到的那两个标准看的我头晕。
有没有通俗一点的说法,来解释一下为什么?

阅读 6k
9 个回答

通俗点说就是有的小数用二进制无法直接精确表示

用得着了解那么详细吗,反正就是计算中遇到浮点数的时候注意下就好了

1/3+1/3请用10位小数表示。

自己思考一下,假设一共只有 64位 的二进制空间,怎么表示任意的一个小数?

通俗一点就是人类使用十进制,计算机使用二进制,一个十进制有限小数转变成二进制可能就是一个无限小数。无限小数怎么记?只能砍掉很后面的小数部位,记录部分数据。所以就不精确喽。

计算机中计算以二进制计算,计算的结果在二进制中超过位数后就溢出失效了,被省略去调后就丢失精度了。应该是这个意思吧

新手上路,请多包涵

首先,计算机采用二进制处理数字,不能够精确表示浮点数。其次,javascript没有处理浮点数精度的方法,很多浮点数都是无限小数,在运算过程中,会被舍弃掉一部分,造成精度的丢失。所以就会产生你说的情况。

新手上路,请多包涵

其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题