国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

詳解js加減乘除精確計算

2024-05-06 16:49:14
字體:
供稿:網(wǎng)友

JS無法進(jìn)行精確計算的bug

在做CRM,二代審核需求審核詳情頁面時。需要按比例(后端傳類似0.8的小數(shù))把用戶輸入的數(shù)字顯示在不同的地方。 
在做dubheInvest = invest * (1 - ratio);運(yùn)算時發(fā)現(xiàn)問題。具體如下: 
示例代碼:

console.log( 1 - 0.8 ); //輸出 0.19999999999999996 console.log( 6 * 0.7 ); //輸出 4.199999999999999 console.log( 0.1 + 0.2 ); //輸出 0.30000000000000004 console.log( 0.1 + 0.7 ); //輸出 0.7999999999999999 console.log( 1.2 / 0.2 ); //輸出 5.999999999999999 

通過上面舉出的例子可以看到,原生的js運(yùn)算結(jié)果不一定準(zhǔn)確,會丟失精度。 

解決方案

解決方案的原理是,將浮點(diǎn)數(shù)乘以(擴(kuò)大)10的n次方倍,把浮點(diǎn)數(shù)變?yōu)檎麛?shù)后再進(jìn)行相應(yīng)的運(yùn)算,最后將得到的結(jié)果除以(縮?。?0的n次方倍。

原理示例:

將console.log(1-0.8);  變?yōu)?console.log((1 * 10 - 0.8 * 10) / 10); 即可得到正確的值 
根據(jù)上述原理,可以封裝一些方法出來解決此類問題。如下所示(Math.pow(x, y);表示求x的y次方):

//加 function floatAdd(arg1,arg2){   var r1,r2,m;   try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}   try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}   m=Math.pow(10,Math.max(r1,r2));   return (arg1*m+arg2*m)/m; }   //減 function floatSub(arg1,arg2){  var r1,r2,m,n;  try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  m=Math.pow(10,Math.max(r1,r2));  //動態(tài)控制精度長度  n=(r1>=r2)?r1:r2;  return ((arg1*m-arg2*m)/m).toFixed(n); }   //乘 function floatMul(arg1,arg2) {  var m=0,s1=arg1.toString(),s2=arg2.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); }     //除 function floatDiv(arg1,arg2){   var t1=0,t2=0,r1,r2;   try{t1=arg1.toString().split(".")[1].length}catch(e){}   try{t2=arg2.toString().split(".")[1].length}catch(e){}      r1=Number(arg1.toString().replace(".",""));    r2=Number(arg2.toString().replace(".",""));   return (r1/r2)*Math.pow(10,t2-t1); } 

以上所述是小編給大家介紹的js加減乘除精確計算詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汕尾市| 隆尧县| 黄冈市| 建阳市| 湟源县| 土默特左旗| 子洲县| 兴隆县| 云霄县| 怀柔区| 泽库县| 志丹县| 罗平县| 蒲江县| 建始县| 仙居县| 廊坊市| 边坝县| 沭阳县| 庐江县| 渭南市| 太湖县| 泸定县| 杨浦区| 夏津县| 淳化县| 兴义市| 安仁县| 孟津县| 芦山县| 乌兰察布市| 大余县| 晋州市| 申扎县| 高密市| 宁晋县| 鹿泉市| 永宁县| 花莲县| 紫云| 亳州市|