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

首頁 > 語言 > JavaScript > 正文

js小數運算出現多位小數如何解決

2024-05-06 16:24:33
字體:
來源:轉載
供稿:網友

關于JavaScript小數進行加、減、乘、除出現多位小數問題,自己研究了一下,而且作了相關的測試,收獲不少知識點,需要的朋友可以參考下

和大家分享一個有趣的測試:

0.1+0.2 == 0.3 //false

頓時郁悶,好吧!原來0.1+0.2變成:0.30000000000000004

再來一個 2.4/0.8 =>2.9999999999999996 沒辦法換種方式,都轉換成整數 (2.4 * 100)/(0.8 * 100)

10.22 現在要減去 0.11 結果值又出現了很多的小數 10.110000000000001,然后我就用了 toFixed 方法來過濾小數,但是不知道跟前面那種轉換成整數后再執行哪種效率高,好!還是試下再說吧!

 

 
  1. var date1 = new Date(); 
  2. for(var i = 0; i < 10000; i++){ 
  3. var result1 = (10.22 - 0.11).toFixed(2);  
  4. alert(new Date() - date1);//效率低 
  5.  
  6. var date2 = new Date(); 
  7. for(var j = 0; j < 10000; j++){ 
  8. var result2 = (10.22 * 1000 - 0.11 * 1000) / 1000;  
  9. alert(new Date() - date2);//效率高 
  10.  
  11. alert(0.1 + 0.2 == 0.3); //既然返回false 
  12. alert(0.1 + 0.2); //既然返回0.30000000000000004 
  13. alert(parseFloat(0.1) + parseFloat(0.2)); //還是返回0.30000000000000004 

查了一些資料,一是 JavaScript 浮點數計算的 Bug,另一個是和計算機最終轉換成二進制計算有關系,但是為什么不是所有小數都會有這種現象,目前我也不清楚,有時間再去深入研究一下。

解決方法:

解決這種問題兩種方法,第一種就是利用JavaScript 的toFixed(n) 方法,直接獲取N 位小數,不過,個人覺得這種方法在數據精度上會有一些問題。如果數據精度要求不高的話可以使用。

 

 
  1. alert((0.1 + 0.2).toFixed(1)); 

第二種方法就是自己編寫運算方法。以下是自定義加法函數,使用此方法進行相加會避免上面問題。

 

 
  1. //自定義加法運算 
  2. function addNum (num1, num2) { 
  3. var sq1,sq2,m; 
  4. try { 
  5. sq1 = num1.toString().split(".")[1].length; 
  6. catch (e) { 
  7. sq1 = 0; 
  8. try { 
  9. sq2 = num2.toString().split(".")[1].length; 
  10. catch (e) { 
  11. sq2 = 0; 
  12. m = Math.pow(10,Math.max(sq1, sq2)); 
  13. return (num1 * m + num2 * m) / m; 
  14. alert(addNum(0.1, 0.2)); 

當然,簡單一點也可以寫成:alert((num * 3 + 10 * 3) /3); 這樣也不會出現 N 多位小數。

alert((num * 3 + 10 * 3) /3); 與 alert(num + 10); 這兩種寫法計算機在底層轉換成二進制運算是有區別的,或許這就是出現上述問題的原因,還有待我們去深入研究,大家可以多多討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 申扎县| 巨野县| 普安县| 定日县| 区。| 会理县| 故城县| 霍邱县| 崇阳县| 江达县| 辰溪县| 东源县| 时尚| 灌南县| 商洛市| 阳江市| 饶平县| 浪卡子县| 福清市| 永善县| 辰溪县| 连江县| 芒康县| 揭东县| 汽车| 辉南县| 南郑县| 霞浦县| 永寿县| 唐河县| 福清市| 江西省| 宜都市| 昆山市| 乌审旗| 洛扎县| 胶南市| 兖州市| 渭源县| 隆安县| 鲁甸县|