322
人物
JavaScript浮点运算的问题
问题这样的:37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)
我先怀疑是四舍五入的问题,就直接用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; }
最后更新:2017-04-03 14:53:40
上一篇:
poj 3006 Dirichlet's Theorem on Arithmetic Progressions 【素数筛】
下一篇:
网络子系统47_ip内核协议栈蓝图
PostgreSQL 聚合函数讲解 - 4 总体协方差, 样本协方差
VS2010 插件安装及推荐
[Qt Topic] – 中文化研习,做一个多语言的简易天气预报器
终于晓得为什么招不到程序员啦
Print2Flash出现"System Error. Code:1722. RPC服务器不可用."错误解决办法
收录高的网站关键词一定要这么布局
android之自定义ViewGroup和自动换行的布局的实现
高效地显示Bitmap图片 4 - 使用ViewPager与GridView显示图片
proxool数据库连接池使用实例
oracle中两表之间值互相插入和表自身插入值