日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript高精度计算解决方案

發布時間:2025/3/20 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript高精度计算解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先解決精度最便捷的方式:

x為要做精度處理的數值,先將x放大10000倍,再四舍五入,在除以10000倍。

Math.round(x*10000)/10000

注意:這里乘的倍數和你要保留的小數位數相對應。比如要保留2位,則乘100倍;保留3位,則乘1000倍。

該方法可以保證大部分情況下適用。


如果你要保證極其高的精度,則需要采用下面的方法處理。

--------------------------------------------------------------------------------------------------------------------------------------------

1,簡介 ??????????? Javascript中高精度計算,主要解決Javascript不精確問題,此解決方案包括,浮點數數計算出現不精確問題;浮點數計算中指定精度的方法。計算不精確通過 Arithmetic(函數)處理;指定精度通過FormatByAccuracy(函數)處理,這兩個函數也是本實例中最主要的兩個方法。可用于JS開發和.NET的ajax開發項目中。

2,實例

?

3,code

[html]?view plaincopy
  • ?<pre?class="html"?name="code"><html>??
  • ??
  • <head>???
  • ??
  • ????<title>javascript高精度計算解決方案</title>??
  • ??
  • ????<script?language="javascript"?type="text/javascript">??
  • ??
  • ??????????
  • ??
  • ????????function?AutoCalculate(rowid,flag){??
  • ??
  • ????????????///?<summary>自動計算數量、單價、金額</summary>?????
  • ??
  • ????????????///?<param?name="obj">輸入框控件</param>???????
  • ??
  • ????????????///?<param?name="rowid">new?rowid</param>?????
  • ??
  • ????????????///?<param?name="flag">N數量P單價M金額</param>??????
  • ??
  • ????????????var?objN?=?document.getElementById("txtN"+rowid);??
  • ??
  • ????????????var?objP?=?document.getElementById("txtP"+rowid);??
  • ??
  • ????????????var?objM?=?document.getElementById("txtM"+rowid);??
  • ??
  • ??????????????
  • ??
  • ????????????//取設置的精度??
  • ??
  • ????????????var?np?=?document.getElementById("txtNP").value;??
  • ??
  • ????????????var?pp?=?document.getElementById("txtPP").value;??
  • ??
  • ????????????var?mp?=?document.getElementById("txtMP").value;??
  • ??
  • ??????????????
  • ??
  • ????????????//check??
  • ??
  • ????????????if(np>21||pp>21||mp>21)??
  • ??
  • ????????????{??
  • ??
  • ??????????????alert('精度最大21!');???
  • ??
  • ??????????????return;??
  • ??
  • ????????????}??
  • ??
  • ??????????????
  • ??
  • ????????????//數據精度處理??
  • ??
  • ????????????objN.value?=?FormatByAccuracy(objN.value,np);??
  • ??
  • ????????????objP.value?=?FormatByAccuracy(objP.value,pp);??
  • ??
  • ??????????????????
  • ??
  • ????????????//進行計算??
  • ??
  • ????????????if(flag=="N"){?//修改數量??
  • ??
  • ????????????????if(objN.value!=""){?//如果數量欄位值不為空??
  • ??
  • ????????????????????if(objP.value?!=?""){?//?如果單價不為空,則重新計算金額??
  • ??
  • ????????????????????????objM.value?=?Arithmetic(objN.value,'*',objP.value);??
  • ??
  • ????????????????????}else{???
  • ??
  • ????????????????????????if(objM.value!=""){?//如果單價為空,金額不為空,計算出單價??
  • ??
  • ????????????????????????????if(objN.value!=0){//如果數量不為0??
  • ??
  • ????????????????????????????????objP.value?=?Arithmetic(objM.value,'/',objN.value);??
  • ??
  • ????????????????????????????}??
  • ??
  • ????????????????????????}??
  • ??
  • ????????????????????}??
  • ??
  • ????????????????}else{??//如果數量欄位值為空,則清空金額欄位。??
  • ??
  • ????????????????????objM.value?=?"";??
  • ??
  • ????????????????}??
  • ??
  • ????????????}else?if(flag=="P"){//修改單價??
  • ??
  • ?????????????????if(objP.value!=""){?//如果單價欄位值不為空??
  • ??
  • ??????????????????????if(objN.value!=""){?//如果數量欄位值不為空,重算金額欄位??
  • ??
  • ??????????????????????????objM.value?=?Arithmetic(objN.value,'*',objP.value);??
  • ??
  • ??????????????????????}else{//數量欄位值為空,清空金額欄位??
  • ??
  • ??????????????????????????objM.value?=?"";??
  • ??
  • ??????????????????????}??
  • ??
  • ?????????????????}else{//如果單價欄位值為空??
  • ??
  • ??????????????????????if(objN.value!=""){?//如果數量欄位值不為空,清空金額欄位??
  • ??
  • ??????????????????????????objM.value?=?"";??
  • ??
  • ??????????????????????}else{??
  • ??
  • ????????????????????????
  • ??
  • ??????????????????????}??
  • ??
  • ?????????????????}??
  • ??
  • ????????????}else?if(flag=="M"){//修改金額??
  • ??
  • ?????????????????if(objM.value!=""){?//如果金額欄位值不為空??
  • ??
  • ??????????????????????if(objN.value!=""){?//如果數量欄位值不為空,重算單價欄位??
  • ??
  • ??????????????????????????if(objN.value!="0"){//如果數量不為0??
  • ??
  • ??????????????????????????????objP.value?=?Arithmetic(objM.value,'/',objN.value);??
  • ??
  • ??????????????????????????}??
  • ??
  • ??????????????????????}else{//數量欄位值為空,清空單價欄位??
  • ??
  • ??????????????????????????objP.value?=?"";??
  • ??
  • ??????????????????????}??
  • ??
  • ?????????????????}else{//如果金額欄位值為空??
  • ??
  • ??????????????????????if(objN.value!=""){?//如果數量欄位值不為空,清空單價欄位??
  • ??
  • ??????????????????????????objP.value?=?"";??
  • ??
  • ??????????????????????}else{??
  • ??
  • ??????????????????????}??
  • ??
  • ?????????????????}??
  • ??
  • ????????????}?????
  • ??
  • ????????????//處理計算結果精度,有可能是算金額,有可能是算單價??
  • ??
  • ????????????objP.value?=?FormatByAccuracy(objP.value,pp);??
  • ??
  • ????????????objM.value?=?FormatByAccuracy(objM.value,mp);??
  • ??
  • ??????????????
  • ??
  • ????????????//計算合計金額??
  • ??
  • ????????????CalculateSumMoney();??
  • ??
  • ????????}??
  • ??
  • ??????????
  • ??
  • ????????function?CalculateSumMoney(){??
  • ??
  • ????????????///?<summary>計算合計金額</summary>??
  • ??
  • ????????????var?objM?=?document.getElementsByName("txtM");??
  • ??
  • ????????????var?sumMoney?=0;??
  • ??
  • ????????????var?m;??
  • ??
  • ????????????for(var?i=0;i<objM.length;i++){??
  • ??
  • ????????????????m?=?objM.item(i).value;??
  • ??
  • ????????????????if(m?!=?""){??
  • ??
  • ????????????????????sumMoney?=?Arithmetic(sumMoney,'+',m);??
  • ??
  • ????????????????}??
  • ??
  • ????????????}??
  • ??
  • ????????????document.getElementById("txtSum").value?=?sumMoney;??
  • ??
  • ????????}??
  • ??
  • ????????function?FormatByAccuracy(val,accuracy){??
  • ??
  • ????????????///?<summary>浮點數精度處理</summary>??
  • ??
  • ????????????///?<par?accuracy>小數位精度</par>??
  • ??
  • ????????????///?<bug>由于toPrecision是從第一個不為0的值開始處理精度,??
  • ??
  • ????????????///所以暫不考慮0.00000X(<0.01)的情況</bug>??
  • ??
  • ????????????if(val){??
  • ??
  • ????????????????if(accuracy==0&&parseFloat(val)<1){??
  • ??
  • ????????????????????return?parseFloat(val).toPrecision();??
  • ??
  • ????????????????}else{??
  • ??
  • ????????????????????val?=?Number(val).toString();??
  • ??
  • ????????????????????index?=?val.indexOf('.');??
  • ??
  • ????????????????????//len整數位精度??
  • ??
  • ????????????????????len?=?index==-1?val.length:(val.substr(0,index)=='0'?index-1:index);??
  • ??
  • ????????????????????accuracy?=?parseInt(len,10)+parseInt(accuracy,10);??
  • ??
  • ????????????????????//toPrecision最大支持21位處理??
  • ??
  • ????????????????????accuracy?=?accuracy>21?21:accuracy;??????????????????
  • ??
  • ????????????????????return?parseFloat(val).toPrecision(accuracy);??
  • ??
  • ????????????????}??
  • ??
  • ????????????}else{??
  • ??
  • ????????????????return?val;??
  • ??
  • ????????????}??
  • ??
  • ????????}??
  • ??
  • ????????function?Arithmetic(arg1,operator,arg2){??
  • ??
  • ????????????///<summary>四則運算,基本思路:轉整計算然后恢復小數位</summary>??
  • ??
  • ????????????///<par>operator運算符</par>??
  • ??
  • ????????????///<result>計算結果</result>??
  • ??
  • ????????????var?r1,r2,mul,size;??
  • ??
  • ????????????try{??
  • ??
  • ????????????????r1=arg1.toString().split(".")[1].length;??
  • ??
  • ????????????}catch(e){??
  • ??
  • ????????????????r1=0;??
  • ??
  • ????????????}??
  • ??
  • ????????????try{??
  • ??
  • ????????????????r2=arg2.toString().split(".")[1].length;??
  • ??
  • ????????????}catch(e){??
  • ??
  • ????????????????r2=0;??
  • ??
  • ????????????}??
  • ??
  • ????????????size?=?Math.max(r1,r2);??
  • ??
  • ????????????switch(operator){??
  • ??
  • ????????????????????case?"+":??
  • ??
  • ????????????????????case?"-":??
  • ??
  • ????????????????????????????mul?=?size;??
  • ??
  • ????????????????????????????break;??
  • ??
  • ????????????????????case?"*":??
  • ??
  • ????????????????????????????mul?=?2?*?size;??
  • ??
  • ????????????????????????????break;??
  • ??
  • ????????????????????case?"/":??
  • ??
  • ????????????????????????????mul?=?0;??
  • ??
  • ????????????????????????????break;??
  • ??
  • ????????????}??
  • ??
  • ????????????return?eval((arg1*Math.pow(10,?size))?+?operator?+?(arg2*Math.pow(10,?size)))?/?Math.pow(10,?mul);??
  • ??
  • ????????}??
  • ??
  • ??
  • ??
  • ????</script>??
  • ??
  • </head>??
  • ??
  • <body>??
  • ??
  • ????<form?id="form1"?>??
  • ??
  • ????????<h3>簡介</h3>??
  • ??
  • ????????Javascript中高精度計算,主要解決Javascript不精確問題,此解決方案包括,浮點數數計算出現不精確問題;浮點數計算中指定精度的方法。<br>計算不精確通過?Arithmetic(函數)處理;指定精度通過FormatByAccuracy(函數)處理,這兩個函數也是本實例中最主要的兩個方法。<br>?可用于JS開發和.NET的ajax開發項目中。</??
  • ??
  • ????????<hr>??
  • ??
  • ????????數量精度:<input?type="text"?id="txtNP"?value="1"?/>??
  • ??
  • ????????單價精度:<input?type="text"?id="txtPP"?value="1"?/>??
  • ??
  • ????????金額精度:<input?type="text"?id="txtMP"?value="1"?/>??
  • ??
  • ????????<table?width="600"?border="1"?cellpadding="0"?id="tblMats"?cellspacing="0"?>??
  • ??
  • ??????????<tr?height="20"?align="center">???
  • ??
  • ????????????<th??width="60px">數量</th>????
  • ??
  • ????????????<th??width="60px">單價</th>???
  • ??
  • ????????????<th??width="70px">金額</th>??
  • ??
  • ??????????</tr>??
  • ??
  • ??????????<tr?height="21"??align="center">??????
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?id="txtN0"?onblur="AutoCalculate(0,'N')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??????????????????????????????????
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?id="txtP0"?onblur="AutoCalculate(0,'P')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?name="txtM"?id="txtM0"?onblur="AutoCalculate(0,'M')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??
  • ??
  • ??????????</tr>??
  • ??
  • ??????????<tr?height="21"??align="center">???????
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?id="txtN1"?onblur="AutoCalculate(1,'N')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??????????????????????????????????
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?id="txtP1"?onblur="AutoCalculate(1,'P')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??
  • ??
  • ????????????<td?>??
  • ??
  • ????????????????<input?width="40"?type="text"?name="txtM"?id="txtM1"?onblur="AutoCalculate(1,'M')"?style="width:100%;?text-align:right"??/>??
  • ??
  • ????????????</td>??
  • ??
  • ??????????</tr>??
  • ??
  • ??????????<tr?height="21"??align="center">??
  • ??
  • ????????????<td??colspan="8">??
  • ??
  • ????????????????<input?type="text"?id="txtSum"?value="0"??readonly="readonly"?style="width:100%;text-align:right;?"??/></td>??
  • ??
  • ??
  • ??
  • ??????????</tr>??
  • ??
  • ????</table>??
  • ??
  • ????</form>??
  • ??
  • </body>??
  • ??
  • </html>??
  • ??
  • </pre>??
  • 總結

    以上是生活随笔為你收集整理的javascript高精度计算解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品成人av一区二区在线播放 | xxxxhdvideos| 亚洲女人天堂av | 中文字幕在线视频免费观看 | av一区二区三 | 国产欧美日韩在线 | 久久久久国产精品国产 | 手机免费看av| 一区二区三区四区五区六区 | 女生张开腿给男生桶 | 狠狠精品干练久久久无码中文字幕 | 一区二区三区四区久久 | 99国产精品一区二区三区 | 放荡的美妇在线播放 | 少妇高潮大叫好爽喷水 | 日韩无码精品一区二区 | 男女www | 91视频免费播放 | 视频日韩 | 国产精品成人免费视频 | 欧美日本韩国一区二区三区 | 艹男人的日日夜夜 | 国产极品美女高潮无套嗷嗷叫酒店 | 97精品国产97久久久久久粉红 | 91国产大片 | 姐姐的秘密韩剧免费观看全集中文 | 日韩精品在线观看中文字幕 | 日日干日日射 | 午夜激情导航 | 最新黄色av| 99精品视频免费 | 大香焦久久 | 久久泄欲网 | 九九精品免费视频 | 国产精品一区二区麻豆 | 99自拍| 中文字幕一区二区久久人妻网站 | 日韩三级成人 | 91视色 | 国产精品毛片va一区二区三区 | 美女扒开尿口给男人捅 | 超碰97最新 | 在线播放一区 | 国产第113页| 久99精品 | 精品视频免费在线 | 国产精品中文字幕在线 | 国产无套丰满白嫩对白 | 在线免费日韩 | 日韩激情| 69av网站| 欧洲中文字幕日韩精品成人 | 香蕉久久精品 | 一级网站在线观看 | 亚洲性猛交xxxx乱大交 | 天天操穴 | 一本一道波多野结衣av黑人 | 欧美精品在线免费观看 | 日少妇视频| 三级在线国产 | 日韩欧美精品一区二区三区 | 欧美激情爱爱 | jizz18欧美18 | 欧美成人精品一区二区三区在线观看 | 日韩久久精品 | 性欧美video另类hd尤物 | 永久视频 | 午夜在线观看视频网站 | 本站只有精品 | 中文幕无线码中文字夫妻 | 精品一区二区欧美 | 一级黄色电影片 | 国产性生活一级片 | 91免费精品视频 | 亚洲国产欧美一区二区三区深喉 | 一级片观看 | sm调教羞耻姿势图片 | 国产探花一区二区 | 日韩一区二区三区精品 | 精品毛片一区二区三区 | h在线免费 | 中文字幕人妻一区 | 喷潮在线观看 | 野外(巨肉高h) | 国产不卡视频在线观看 | 中文字字幕一区二区三区四区五区 | 久久偷看各类wc女厕嘘嘘偷窃 | 黑人大群体交免费视频 | av九九九| a√在线观看 | 污网站免费观看 | 丰满人妻一区二区三区53号 | 亚洲一区高清 | 国产一区二区三区福利 | 日韩一级理论片 | 精品人妻无码一区二区性色 | 很黄的网站在线观看 | 久久青青热 | 国内精品久久久久久久影视简单 |