2010-07-15 12 views
8

Come sapete, la funzione del javascript parseFloat funziona solo fino a quando non incontra un carattere non valido, così per esempioE 'possibile analizzare la stringa intera?

parseFloat("10.123") = 10.123 
parseFloat("12=zzzz") = 12 
parseFloat("z12") = NaN 

C'è un modo o un'implementazione di parseFloat che sarebbe tornato NaN se la stringa tutta non è un numero float valido?

risposta

17

Utilizzare questo invece:

var num = Number(value); 

Poi si può fare:

if (isNaN(num)) { 
    // take proper action 
} 
+2

Questa è un'idea migliore della mia risposta :) – rfunduk

+0

Questo è perfetto, grazie. Dovrò aspettare ancora 8 minuti per contrassegnare la risposta :) – mcm69

+1

Basta fare attenzione a casi specifici, ad esempio: isNaN (parseFloat ("")); // true' e 'Number (" ") == 0; // true' – CMS

4

Forse provare:

var f = parseFloat(someStr); 
if(f.toString() != someStr) { 
    // string has other stuff besides the number 
} 

Aggiornamento: Non fare questo, utilizzare @ DCP metodo :)

+4

+1 per fornire una risposta che risolve il problema e quindi indirizza l'OP per utilizzare una risposta che consideri migliore. –

+0

È davvero un brutto modo per risolvere questo problema poiché non funzionerà con valori come "12.5000". – HoLyVieR

+0

@HoLyVieR: Sì, dipende davvero da dove provengono i tuoi dati. La maggior parte delle lingue che serializzano i valori non si riempie di zeri a meno che non lo dici esplicitamente. Poiché 'Number()' risolve questo tipo di problemi (con alcune avvertenze a parte) non è necessario farlo. – rfunduk

0
var asFloat = parseFloat("12aa"); 
if (String(asFloat).length != "12aa".length) { 
    // The value is not completely a float 
} 
else { 
    // The value is a float 
} 
Problemi correlati