JavaScript浮点运算的问题
JavaScript 问题
2023-09-14 08:57:15 时间
span >37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)
我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。
我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005
解决:
根据网上的方法写了一个函数:
/** * 四则运算方法 * @param {} * numA 第一个数字 * @param {} * numB 第二个数字 * @param {} * sign 运算符(+ - * /) function calculate(numA,numB,sign) { var m=0,numALen=0,numBLen=0; try{numALen=numA.toString().split(".")[1].length}catch(e){} try{numBLen=numB.toString().split(".")[1].length}catch(e){} if(sign === +){ m=Math.pow(10,Math.max(numALen,numBLen)); if(m == 0){ m = 1; return (numA*m+numB*m)/m; }else if(sign === -){ m=Math.pow(10,Math.max(numALen,numBLen)); if(m == 0){ m = 1; return (numA*m-numB*m)/m }else if(sign === *){ m = Math.pow(10,numALen + numBLen) ; if(m == 0){ m = 1; return Number(numA.toString().replace(".",""))*Number(numB.toString().replace(".",""))/m }else if(sign === /){ m = Math.pow(10,numALen - numBLen) ; if(m == 0){ m = 1; return (Number(numA.toString().replace(".",""))/Number(numB.toString().replace(".","")) )*m; return 0; }
相关文章
- 怎样用JavaScript和HTML5 Canvas绘制图表
- JavaScript实现html购物车代码
- [Javascript] Wait for Multiple JavaScript Promises to Settle with Promise.allSettled()
- [Javascript] Create Your First Iterator in JavaScript
- [Javascript] bukld 'SQL' like object tree
- JavaScript Window History 浏览器的历史
- [Javascript] Understanding the difference between .prototype and .__proto__ in JavaScript
- [Javascript] Create an Image with JavaScript Using Fetch and URL.createObjectURL
- [Javascript] JavaScript赋值时的传值与传址
- [Javascript] JavaScript Array Methods in Depth - push
- JavaScript函数柯里化
- Angular Component TypeScript代码和最后转换生成的JavaScript代码比较
- javascript案例21——判断用户名和密码是否匹配(while)
- DayPilot 2023.2.5 JavaScript Crack
- 如何在TypeScript/JavaScript项目里引入MD5校验和
- 【华为OD机试 2023】最优高铁城市修建方案(C++ Java JavaScript Python)
- 【 华为OD机试 2023】 连接器问题(C++ Java JavaScript Python)
- web前端Javascript开发学习之JavaScript中的预编译如何进行
- 如何写出优美的 JavaScript 代码?
- web前端框架Javascript开发基础之JavaScript作用域