2013-02-02 16 views
284

Chiunque un suggerimento su come convertire una stringa in un numero in TypeScript?TypeScript Conversione di una stringa in un numero

var aNumber : number = "1"; // --> Error 

// Could this be done? 
var defaultValue = 0; 
var aNumber : number = "1".toInt32(defaultValue); 

// Or .. 
var defaultValue = 0; 
var aNumber : number = StringToInt("1", defaultValue); 

Aggiornamento: Ho fatto qualche sconcertante in più, il migliore SOFAR mi è venuta in mente: var aNumber: number = ("1") * 1;

controllando se una stringa è numerica viene data risposta qui: In Typescript, How to check if a string is Numeric.

+3

'var = aNumber "1";' –

+0

Eventuali duplicati di [a macchina, Come controllare se una stringa è Numeric] (http://stackoverflow.com/questions/23437476/in-typescript -come-per-verificare-se-una-stringa-è-numerico) –

risposta

378

Offriamo le parseInt o parseFloat funzioni, o semplicemente utilizzare il unario + dell'operatore:

var x = "32"; 
var y = +x; // y: number 
+3

piccolo suggerimento: parseInt (null) restituisce NaN ma + restituisce nulla 0 –

32

Spiegazione quello che ha detto Ryan, dattiloscritto abbraccia gli idiomi JavaScript in generale.

var n = +"1"; // the unary + converts to number 
var b = !!"2"; // the !! converts truthy to true, and falsy to false 
var s = ""+3; // the ""+ converts to string via toString() 

Tutti gli interessanti dettagli approfonditi a JavaScript Type Conversion.

489

Il modo tipografico per fare questo sarebbe:

Number('1234') // 1234 
Number('9BX9') // NaN 

come risposta qui: https://stackoverflow.com/a/23440948/2083492

+0

Nota: è possibile verificare la presenza di NaN utilizzando la funzione 'isNaN'. –

+2

Si noti che questo non funziona: let valore: numero = valoreAsString; – yonexbat

+0

Penso che il nuovo numero ("1234"). ValueOf() sia davvero quello che tutti stiamo cercando- – chrismarx

29

Per i nostri compagni di utenti angolari:

all'interno di un modello , Number(x) e parseInt(x) genera errore e +x non ha alcun effetto. Il casting valido sarà x*1 o x/1.

+0

grazie .. solo questo ha funzionato per me – Murat

+0

funziona come un fascino. –

+0

è meraviglioso! come hai detto in HTML + x non converte affatto in numero –

0

Ci sono funzioni integrate come parseInt(), parseFloat() e Number() in Typescript, è possibile utilizzare quelle.

12

Come dimostrato da un altro risposte qui, ci sono diversi modi per eseguire la conversione:

Number('123'); 
+'123'; 
parseInt('123'); 
parseFloat('123.45') 

mi piacerebbe parlare più una cosa sulla parseInt però.

Quando si utilizza parseInt, è opportuno che il parametro passi sempre il parametro. Per la conversione decimale, ovvero 10. Questo è il valore predefinito per il parametro, che è il motivo per cui può essere omesso. Per binario, è un 2 e 16 per esadecimale. In realtà, qualsiasi radix tra e compreso 2 e 36 funziona.

parseInt('123')   // 123 (don't do this) 
parseInt('123', 10)  // 123 (much better) 

parseInt('1101', 2)  // 13 
parseInt('0xfae3', 16) // 64227 

La funzione parseInt, beh, analizza le stringhe di convertirli in numeri. In alcune implementazioni JS, parseInt analizza zeri iniziali come ottale:

Sebbene scoraggiano ECMAScript 3 e proibito dalla ECMAScript 5, molte implementazioni interpretano una stringa numerica che inizia con uno 0 come ottale. Il seguente potrebbe avere un risultato ottale o potrebbe avere un risultato decimale. Specificare sempre una radice per evitare questo comportamento inaffidabile.

- MDN

Il fatto che il codice diventa più chiaro è un bel effetto collaterale di specificando il parametro radix.

Poiché parseFloat analizza solo le espressioni numeriche in Radix 10, non è necessario un parametro di radix qui.

Maggiori informazioni su questo:

6

È possibile seguire uno dei seguenti modi.

var str = '54'; 

var num = +str; //easy way by using + operator 
var num = parseInt(str); //by using the parseInt operation 
Problemi correlati