js中浮点数 0.1+0.7=0.7999999999…… 一般做的时候需要注意一下,如果两个浮点数想加的值为0.8 而他的实际值是0.79999……需要进行处理! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 0.7999999999.toFixed(1) 这个问题我的博客有讲解可以看下https://blog.csdn.net/xsl510079027/article/details/86686551 首先,这并不是JS本身的精度问题,JS表示自己不能背这口黑锅。这其实就是我们计算机本身的问题,是的,你没有听错,就是电脑本身的问题。我们的计算机在进行内部存储数据的编码的时候,0.1本身就不是一个精确的数字0.1,它的误差极小,以至于计算机将其显示成0.1。当我们的代码在被计算机编译的时候,0.1会被计算机解码为一个与真实的0.1本身极为相近的计算机内部编码数字,即是0.000110011001 1001...,同样的0.2和0.3等等也一个道理。也就说,在计算机还没有开始的时候,一个极小的舍入错误就已经产生了,这也是为什么我们所见到的结果与我们所预想的不一样的根本原因。说了这么多,那为什么最后会等于0.7999999999999999 这样一个结果呢?这是因为我们所使用的双精度浮点数的小数部分最多只能支持 52 位两个无限循环的二进制数都分别在其第52位处截断相加,最终就会得到这一结果。至于处理的办法,楼上的老哥的博客写了是用toFixed,确实,这样也可以,emmm,但是怎么嗦呢,其实我不喜欢这种解法。我个人的解决方法倾向于将数据本身乘以10的n次方最后再除以N次方的方法来解决。因为我们的计算机中的二进制可以精确地表示位数有限且分母是2的倍数的小数,这样一来的换算就没有浮点数舍入误差啦~ 帮忙下这是权威指南6的实例 JavaScript如何将属性转化为对象 知道的进来看看 请教一个JS里<a href="#" conclick="">的用法问题,急急急! 如何控制文本在div或td中单行显示? 英文单词自动换行 各位同行高手,一起来赚点外快吧! 散分了!!!!!!!!!! 怎么屏蔽掉IE的关闭功能 xml 取值问题 Extjs中Desktop怎么使用MVC模式开发? Vue2.4和2.6 求解,这2种简单动画写法哪种效率更高,求简单说明原因
这其实就是我们计算机本身的问题,是的,你没有听错,就是电脑本身的问题。
我们的计算机在进行内部存储数据的编码的时候,0.1本身就不是一个精确的数字0.1,它的误差极小,以至于计算机将其显示成0.1。
当我们的代码在被计算机编译的时候,0.1会被计算机解码为一个与真实的0.1本身极为相近的计算机内部编码数字,即是0.000110011001 1001...,同样的0.2和0.3等等也一个道理。也就说,在计算机还没有开始的时候,一个极小的舍入错误就已经产生了,这也是为什么我们所见到的结果与我们所预想的不一样的根本原因。
说了这么多,那为什么最后会等于0.7999999999999999 这样一个结果呢?这是因为我们所使用的双精度浮点数的小数部分最多只能支持 52 位两个无限循环的二进制数都分别在其第52位处截断相加,最终就会得到这一结果。
至于处理的办法,楼上的老哥的博客写了是用toFixed,确实,这样也可以,emmm,但是怎么嗦呢,其实我不喜欢这种解法。
我个人的解决方法倾向于将数据本身乘以10的n次方最后再除以N次方的方法来解决。因为我们的计算机中的二进制可以精确地表示位数有限且分母是2的倍数的小数,这样一来的换算就没有浮点数舍入误差啦~