登录
94b8acf81509ee06f9a48e85c9c3d92f
JavaScript 浮点数和大整数计算精度丢失的原因及解决办法

很多语言都有浮点数计算精度丢失的问题,JavaScript也不例外。相信你也也发现过这样的问题:

那为什么会出现这种问题呢?今天就和大家一起探究一下底层的原因,然后找到解决问题的办法。

1. 浮点数计算精度丢失的原因

JavaScript 中所有数字包括整数和小数都使用一种类型 — Number。遵循 IEEE 754 标准,使用 64 位固定长度来表示,也就是标准的 double 双精度浮点数(32位为单精度浮点数)。

64位比特又可分为三个部分:
符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数
指数位E:中间的 11 位存储指数(exponent),用来表示次方数
尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍零

了解了JavaScript存储浮点数的逻辑,相信你现在已经找到了精度丢失的原因了。我来帮你展示一下浮点数计算的过程,以0.1 + 0.2为例:

第一步:将0.1,0.2转换为二进制存储

0.1 = 0.0001100110011001100110011001100110011001100110011001101
0.2 = 0.0011001100110011001100110011001100110011001100110011010

因为0.1和0.2转换为2进制时都为无限小数,尽管使用上图中的指数表示,尾数超过52位的部分还是会被舍弃。这就是浮点数计算误差的根源。

第二步:将0.1,0.2的二进制数相加

0.1+0.2 = 0.0100110011001100110011001100110011001100110011001100111

第三步:将二进制数结果转为十进制数

0.30000000000000004


top Created with Sketch.

深圳SEO优化公司博雅园林网站优化方案揭阳网站优化页面郑州济南网站优化多少钱天津优化网站有哪些大兴网站优化推广凡科网站优化吗哪里买网站排名软件优化湘潭品牌营销型网站优化郑州种植网站整站优化分析网站SEO优化入门基础教程淄博网站制作定制优化学校怎么优化网站网站优化的方案怎样优化门户网站网站搜索优化03金手指效率鹤壁网站推广优化哪家服务好鞍山网站优化关键词网站优化的原则与依据房地产网站优化方案网站内部优化的方法蚌埠网站首页优化网站内部优化步骤宜都seo网站优化企业网站优化如何网站内容的优化台州网站域名优化洛阳营销型网站优化方案优化网站排名的步骤网站外部优化培训哪里有网站优化系统招商平台歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化