1. 程式人生 > >JS 將 string 轉換成為 number

JS 將 string 轉換成為 number

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
}