首页 技术 正文
技术 2022年11月18日
0 收藏 660 点赞 2,476 浏览 891 个字

先上图:

js-小数计算问题

什么情况?

原因:js采用二进制进行小数计算

先看十进制的小数转换为二进制的方法:

十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位

假如我们有小数111.4(10),我们对他进行一下计算:

首先取小数位0.4,对其进行“乘二取整法”

0.4*2=0.8     取结果的的整数位置上的数是0          |  按

0.8*2=1.6                                                     取1      |  顺

0.6*2=1.2                                                     取1      |  序

0.2*2=0.4                                                     取0      |  写

0.4*2=0.8                                                     取0      |  出

0.8*2=1.6                                                     取1      |

0.6*2=1.2                                                     取1      |

0.2*2=0.4                                                     取0      |

来到这了,我们发现出现了循环,因此可以推知小数点后的二进制是

0.01100110……(循环0110)

整数就不写了,方法是除2取余法

题目中2.6+2.6+2.6=7.800000000001,JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。

解决方法:指定保留几位小数    (7.8).toFixed(2)=7.80;,这种方法有可能损失精度,网上还有自定义这种加法的方法,加一个链接

JS小数运算出现多位小数问题的解决方法

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,024
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,514
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,362
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,776
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,854