天天看點

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
}