麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > 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); 這兩種寫法計算機在底層轉換成二進制運算是有區別的,或許這就是出現上述問題的原因,還有待我們去深入研究,大家可以多多討論。

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

圖片精選

主站蜘蛛池模板: 亚洲成人精品久久久 | 午夜九九九 | 天天透天天狠天天爱综合97 | 亚洲性综合网 | 男女羞羞在线观看 | 欧美雌雄另类xxxxx | 久久影院免费观看 | 国产女做a爱免费视频 | 午夜精品久久久久久久99热浪潮 | 毛片免费视频播放 | 国产合集91合集久久日 | 久久蜜桃精品一区二区三区综合网 | 日韩av影片在线观看 | 黄色av免费电影 | 中文字幕在线免费看 | 中文区中文字幕免费看 | 欧美性受xxxx白人性爽 | 欧美亚洲综合网 | 精品国产一区二区三区在线观看 | 亚洲视频网 | 哪里可以看免费的av | 羞羞答答tv| 欧美一级免费在线观看 | 精品国产91一区二区三区 | 粉嫩粉嫩一区二区三区在线播放 | 欧美一级精品片在线看 | 久久久综合视频 | 中文字幕在线观看精品 | 一区二区三区日韩 | 欧美成人一区二区三区 | 国产精品久久久久久影院8一贰佰 | 黄色高清免费 | 亚洲视频在线视频 | 二区视频 | 久草在线视频中文 | 中文欧美日韩 | 97伦理| 欧美日韩中文字幕在线 | av电影网站在线 | 国产精品视频专区 | 精品亚洲夜色av98在线观看 |