js小數(shù)計算小數(shù)點后顯示多位小數(shù)的實現(xiàn)方法
首先寫一個demo 重現(xiàn)問題,我使用的是一個js在線測試環(huán)境[打開]
改寫displaynum()函數(shù)
function displaynum(){var num = 22.77;alert(num + 10);}
點擊Show按鈕 結(jié)果顯示32.769999999996 出現(xiàn)了N多小數(shù).
也并不是所有數(shù)字都會出現(xiàn)這種現(xiàn)象, 除了 22.99 2.777 , 好像這幾個數(shù)字也沒什么特殊.
查了一些資料, 一是JS浮點數(shù)計算的bug, 另一個是和計算機最終轉(zhuǎn)換成二進制計算有關(guān)系, 但是為什么不是所有小數(shù)都會有這種現(xiàn)象, 目前我也不清楚, 有時間再去深入研究一下。
現(xiàn)在有兩種解決方法, 第一種就是利用JS .toFixed(n) 方法, 直接獲取n位小數(shù), 個人覺得這種方法在數(shù)據(jù)精度上會有一些問題. 如果數(shù)據(jù)精度要求不高的話 可以使用. 第二種方法就是自己寫js 運算方法.
以下是自定義加法函數(shù), 使用此方法進行相加會避免上面問題。
function addNum(num1,num2){var sq1,sq2,m;try{sq1=num1.toString().split(".")[1].length;} catch(e){sq1=0;}try{sq2=num2.toString().split(".")[1].length;} catch(e){sq2=0;}m=Math.pow(10,Math.max(sq1,sq2));return ( num1 * m + num2 * m ) / m;}
當然簡單一點也可以寫成 alert((num * 3 + 10 * 3) /3); 這樣也不會出現(xiàn)n多小數(shù)。
alert((num * 3 + 10 * 3) /3); 與 alert(num + 10); 這兩種寫法計算機在底層轉(zhuǎn)換成二進制運算是有區(qū)別的, 或許這就是出現(xiàn)上述問題的原因
以上這篇js小數(shù)計算小數(shù)點后顯示多位小數(shù)的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
原生js實現(xiàn)jquery函數(shù)animate()動畫效果的簡單實例
下面小編就為大家?guī)硪黄鷍s實現(xiàn)jquery函數(shù)animate()動畫效果的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
深入理解JavaScript 中的匿名函數(shù)((function() {})();)與變量的作用域
匿名函數(shù)沒有實際名字的函數(shù),匿名函數(shù)(function() {})();是一個特殊的閉包寫法。本文蛀牙給大家介紹JavaScript 中的匿名函數(shù)((function() {})();)與變量的作用域,需要的朋友可以參考下2018-08-08
JavaScript通過改變文字透明度實現(xiàn)的文字閃爍效果實例
這篇文章主要介紹了JavaScript通過改變文字透明度實現(xiàn)的文字閃爍效果,結(jié)合完整實例形式分析了javascript基于定時器周期性動態(tài)修改頁面元素屬性的相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
JavaScript常用的彈出廣告及背投廣告實現(xiàn)方法
這篇文章主要介紹了JavaScript常用的彈出廣告及背投廣告實現(xiàn)方法,實例分析了彈出廣告與背投廣告的實現(xiàn)原理與相關(guān)技巧,需要的朋友可以參考下2015-02-02

