JS 四则运算精度丢失解决方案
相信绝大部分js开发者遇见过这个问题,原理很多文章都有解释,我这就不多说了,直接上解决方案的代码。
代码:
//加法 Number.prototype.add = function(arg){ var r1,r2,m; try{r1=this.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)) return (this.mul(m) + arg.mul(m)) / m; } //减法 Number.prototype.sub = function (arg){ return this.add(-arg); } //乘法 Number.prototype.mul = function (arg) { var m=0,s1=this.toString(),s2=arg.toString(); try{m+=s1.split(".")[1].length}catch(e){} try{m+=s2.split(".")[1].length}catch(e){} return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) } //除法 Number.prototype.div = function (arg){ var t1=0,t2=0,r1,r2; try{t1=this.toString().split(".")[1].length}catch(e){} try{t2=arg.toString().split(".")[1].length}catch(e){} with(Math){ r1=Number(this.toString().replace(".","")) r2=Number(arg.toString().replace(".","")) return (r1/r2)*pow(10,t2-t1); } }
这段代码是参考自JS 精度问题,然而这代码还有点小瑕疵,经过小修改后如上。
经过亲测是没什么问题的,大家可以自由测试下。
若该文章解决了你碰到的问题,请点个赞~哈哈
调用方法如下:
如: 0.1+0.2,2.22+0.1,2480-2479.99
0.1.add(0.2);
2.22.add(0.1);
2480.sub(2479.99);
JS 四则运算精度丢失解决方案相关推荐
- js浮点数精度丢失问题及如何解决js中浮点数计算不精准
js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...
- 浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...
- c# 取余数 浮点数_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...
- python 浮点数精度丢失_javascript解决小数的加减乘除精度丢失的方案
原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3* ...
- python 浮点数精度丢失_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源...
浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源 无论在java python javaScript里面都存在 1+ 2!== 3 问题,这个问题的产生根源在于计算存储数字是二进制,对无限循环小 ...
- js做四则运算时,精度丢失问题及解决方法
js做四则运算时,精度丢失问题及解决方法 参考文章: (1)js做四则运算时,精度丢失问题及解决方法 (2)https://www.cnblogs.com/smile-tianxia/p/117149 ...
- 【JS】详解JS精度丢失原理以及业务中价格计算引入数学库 Math.js的使用场景
一.JS为什么会出现精度丢失问题 1.JS基本数据类型 Number 在内存中是怎么存储的? JS中的Number类型使用的是双精度浮点型,也就是其他语言中的double类型.在计算机内存中,单精度数 ...
- JavaScript 进制之间的转换、大数或小数精度丢失、js不同进制的表示(分享)
文章目录 1. toString(radix) 2. parseInt(string, radix) 3. 0.1 + 0.2 !=== 0.3 4. BigInt() 5. js不同进制的表示 1. ...
- 由parseInt 引发的问题---想到浮点运算精度丢失---看透js number 的 encoded
如题 先陈述下问题背景 偶尔测测自己写的计算器,随便输入玩嘛,然后发生下面诡异的事情: 当我从一个 1 输入到十个 1 的时候,过程显示都是正确的,像这样: 继续输入一个 1 的时候,然后就这个样子了 ...
最新文章
- 关于接口测试,我们要测什么,怎么上手
- React Native 设置RGBA背景色
- JS实现动态显示当前时间(12/24小时制)(转载Mr.Think)
- cxf开发基于web的webservice项目(转载)
- 【opencv】实时人脸+眼睛+微笑检测
- 地图标识符号大全_创意游戏小程序大全:胡建土楼游戏!带你领略不一样的创意小游戏...
- ViewPager里面ImageView图片切换出现bug
- 搭建MyEclipse和Tomcat遇到的坑(JavaEE作业)
- eslint 报error
- 【转】win10安装caffe教程
- 动手实现图像双线性插值——实现图像resize
- STM32H743IIT6+USB3300,USB_HS高速双向HID通讯开发
- MyX5TbsPlusDemo【体验腾讯浏览服务Android SDK (TbsPlus 版)】
- Windows10家庭版获取最高管理员权限
- 无线路由器的五种工作模式
- BOC保护的氨基酸卟啉TAPP-Ala-BOC、TAPP-Phe-BOC、TAPP-Trp-BOC、Zn·TAPP-Ala-BOC、Zn·TAPP-Phe-BOC、Zn·TAPP-Trp-BOC齐岳
- android 生成bks_Android 添加 证书(pem,crt,p12,bks,jks)到 keystore.bks
- 完美解决:*.vmx是由VMware产品创建,但该产品与此版VMware workstation不兼容因此无法使用…
- elasticsearch彻底删除文件命令行操作
- 知识点滴 - 如何下载其他地区的iOS App