js乘法对小数点的处理

主题描述:JS[javascript/jscript]做小数乘法运算结果出现浮点错误的解决办法。

JS里做小数的乘法运算时会出现浮点错误,具体可以测试一下:

JavaScript代码
  1. alert(11*22.9)   

结果是251.89999999999998 而不是251.9。

一个简单的乘法运算,让我整了一个下午,主要是对JS不熟练。很是无奈。

解决问题的大概思路就是,先把因数放大为整数,最后再除以相应的倍数,这样就能得到正确的结果了。

下面的代码:

JavaScript代码
  1. //乘法,可小数  
  2. function accMul()  
  3. {  
  4. var m=0,s1=document.all.price.value.toString(),s2=document.all.amount.value.toString();  
  5. try{m+=s1.split(".")[1].length}catch(e){}  
  6. try{m+=s2.split(".")[1].length}catch(e){}  
  7. return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)  
  8. }  
  9.   
  10. Number.prototype.mul = function (arg){  
  11. return accMul(arg, this);  
  12. }  
  13.   
  14. function showresult(){  
  15.     document.all.moneys.value=accMul();  
  16. }  

在页面上的代码可以是:

XML/HTML代码
  1.  <tr>  
  2.    <td align="right">价格:</td>  
  3.    <td colspan="4" >  
  4. <input name="price" id="price" type="text" size="20" maxlength="10" class="inputText" /> 单位:<%Call showclassSelectMenu(0,22,"unit","单位")%></td>  
  5.  </tr>  
  6.  <tr>  
  7.    <td align="right">数量:</td>  
  8.    <td colspan="4" >  
  9. <input name="amount" id="amount" type="text" size="20" maxlength="10" onkeyup="showresult()" class="inputText" />  
  10. </td>  
  11.  </tr>  
  12.  <tr>  
  13.    <td align="right"><strong>金额</strong></td>  
  14.    <td colspan="4" >  
  15. <input name="moneys" id="moneys" type="text" size="20" maxlength="10" class="inputText" /><font color="red">*</font></td>  
  16.  </tr>  

通过表单项的ID来获取值。

我一贯喜欢纠结:为什么这么个BUG,Javascript就不解决呢?

 



[本日志由 ancher 于 2016-05-17 01:25 PM 更新]
上一篇: 关于股市的一个很经典的小故事
下一篇: 医纬达:走出医患互伤的“黑色五月”
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: js 乘法 运算 浮点数
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1521
发表评论
你没有权限发表评论!