JS 將 string 轉換成為 number
阿新 • • 發佈:2018-12-21
JS 將 string 轉換成為 number
轉自:blog.csdn.net/For_GG/article/details/78557966
彙總一下各類方法:
1):parseInt
var x = parseInt("10"); // 10
帶有兩個引數:第一個是目標轉換字串,第二個用來指定將字串轉化為幾進位制的數字,並且radix的範圍是(2~36)
parseInt(string, radix)
2):利用js變數弱型別轉換,最近很喜歡用這種方式程式碼簡潔
var a = "1000"; typeof( +a ) //number typeof( a-0 ) //number typeof( a*1 ) //number
3):parseFloat 方法可以將對應的字串轉化為浮點型別的數字。
num.toFixed(2)可以四捨五入,保留兩位小數,但會轉換為String型別
var x = "2.446242342"
var num =parseFloat(x); //typeof(num) number
num = num.toFixed(2); // 輸出結果為 2.45 typeof(num) String
我們可以用取巧的方法達到保留兩位小數的目的:
Math.floor(15.7784514000 * 100) / 100
4):Math.floor 的方式可以對字元和數字進行向下取整
Math.ceil(5/2)向上取整,有小數就整數部分加1
var x = Math.floor("1000.01"); // 1000
var x = Math.floor(1000.01); // 1000
var x = Math.ceil(1000.01); // 1001
var x = Math.floor(1000.91); // 1000
5):Math.round 的方式可以對字元和數字進行四捨五入取整
var x = Math.round("1000"); //1000 equivalent to round("1000",0) var x = Math.round("1000.56"); // 1001 var x = Math.round("1000.23"); // 1000
6):Number()的強制型別轉換與parseInt()和parseFloat()方法的處理方式相似,只是它轉換的是整個值,而不是部分值。示例如下:
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100
浮點數計算精度問題
0.1 => 0.0001 1001 1001 1001…(無限迴圈)
0.2 => 0.0011 0011 0011 0011…(無限迴圈)
其實對於浮點數的四則運算,幾乎所有的程式語言都會有類似精度誤差的問題,只不過在 C++/C#/Java 這些語言中已經封裝好了方法來避免精度的問題,而 JavaScript 是一門弱型別的語言,從設計思想上就沒有對浮點數有個嚴格的資料型別,所以精度誤差的問題就顯得格外突出。下面就分析下為什麼會有這個精度誤差,以及怎樣修復這個誤差。
下面是我的解決辦法
//浮點數運算
//加法
function add(x,y){
var lenx = Math.floor(x) === x? 0:x.toString().split('.')[1].length,
leny = Math.floor(y) === y? 0:y.toString().split('.')[1].length,
num = Math.pow(10,Math.max(lenx,leny));
return x*num+y*num/num
}
//乘法
function mul(x,y){
var lenx = Math.floor(x) === x? 0:x.toString().split('.')[1].length,
leny = Math.floor(y) === y? 0:y.toString().split('.')[1].length,
len = lenx+leny;
return Number(x.toString.replace(',','')) * Number(y.toString.replace(',','')) /len
}