2017-05-30 29 views
2

如果我不知道字符串值是否爲有效數字,如何將字符串轉換爲數字。我想離開字符串,如果它是無效的。只有當字符串是數字時,Javascript纔會將字符串轉換爲數字

"0" -> 0 
"0.5" -> 0.5 
"100" -> 100 
"abc" -> "abc" // remains a string 
" " -> " " // remains an empty string 
"-1" -> -1 // I'd like to convert negative numbers too 

我已經試過

var str = " "; 
var num = +str // num = 0 
var num = Number(str) // num = 0 
var num = parseInt(str) // num = NaN 

所以看起來我的問題是有空間的。我正在考慮使用parseInt,但我認爲在Javascript中使用NaN作爲一個值可能不是個好主意,只是將字符串保持原樣會更好。

+5

創建將使用'parseInt'自定義的功能。如果結果是'NaN',則返回字符串 – Weedoze

+1

,您可以添加簡單的'if'條件。沒有? –

+1

'0.5'不是一個整數...? – evolutionxbox

回答

4

您可以檢查弦的數值是否等於該值。

var array = ["0", "0.5", "100", "abc", " "]; 
 

 
console.log(array.map(a => (+a).toString() === a ? +a : a));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

Das ist wunderbar,danke! –

2

您可以創建自定義函數

function customParseInt(str) { 
 
    const parsed = +str; 
 
    return str.trim()==="" ? str : isNaN(parsed) ? str : parsed; 
 
} 
 

 
console.log(customParseInt("0")); 
 
console.log(customParseInt("0.5")); 
 
console.log(customParseInt("100")); 
 
console.log(customParseInt("abc")); 
 
console.log(customParseInt(" ")); 
 
console.log(customParseInt("5ab")); 
 
console.log(customParseInt("-1"));

+1

@RobG OP沒有提供有關科學計數的詳細信息 – Weedoze

+1

OP甚至沒有區分Float和Int(問題詢問int,但以0.5爲例)。 – evolutionxbox

+0

@Weedoze使用'parseFloat'而不是'parseInt'。它應該避免使用==與===解析浮點值 – prasanth

1
var str = ""; 
var num = isNaN(Number(str)) ? str : Number(str); 
0

您可以使用==檢查,如果轉換int和字符串相同。

比如你有2串

var a = '123', b = '111x'; 
var intA = parseInt(a), intB = parseInt(b); 
if(a == intA){ 
    console.log(a is a valid integer string); // this gets printed 
}else{ 
    console.log('a is not a valid integer string'); 
} 

if(b == intB){ 
    console.log(b is a valid integer string); 
}else{ 
    console.log('b is not a valid integer string');// this gets printed 
} 
+0

。 –

+0

此外,當使用parseInt,總是使用基數... https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt –

+0

@VedranMaricevic'=='應該避免只有當類型強制不明白。 – evolutionxbox

0

。利用 '||' 的運算符如下

var num = parseInt(str)|| NUM;

它將返回'str'的整數等價物,否則保持原樣。

+0

如果num =「0」,它不會只是一個字符串嗎? –

0

您需要先做一些簡單的檢查,然後使用Number(x),因爲它可以處理小數點數等等。 parseInt只處理,顧名思義,整數。

這裏是一個例子。

function toNumberIfNumber(convertee) { 
    const prep = convertee.trim(); 
    if (prep === "") { 
     return convertee; 
    } 

    const num = Number(convertee); 
    if (isNaN(num)) { 
    return convertee; 
    } else { 
    return num; 
    } 
} 

console.log(toNumberIfNumber("0")); //0 
console.log(toNumberIfNumber("0.5")); //0.5 
console.log(toNumberIfNumber("100")); //100 
console.log(toNumberIfNumber("abc")); //"abc" 
console.log(toNumberIfNumber(" ")); //" "