2010-07-15 15 views
8

Como saben, la función del Javascript parseFloat sólo funciona hasta que se encuentra un carácter no válido, así que por ejemplo¿Es posible analizar el sonido de la secuencia completa?

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

¿Existe una manera o de una implementación de parseFloat que devolvería NaN si la cadena entera no es un número de flotador válido?

Respuesta

17

Use este lugar:

var num = Number(value); 

A continuación, puede hacer:

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

Esta es una mejor idea que mi respuesta :) – rfunduk

+0

Eso es perfecto, gracias. Tendré que esperar 8 minutos para marcar la respuesta :) :) – mcm69

+1

Solo tenga cuidado con algunos casos específicos, por ejemplo: 'isNaN (parseFloat (" ")); // true' y 'Number (" ") == 0; // verdadero' – CMS

4

Tal vez intente:

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

actualización: No hacer esto, utilice @ de DCP método :)

+4

+1 para proporcionar una respuesta que resuelva el problema y luego apunte el OP para usar una respuesta que considere mejor. –

+0

De hecho, es una mala manera de resolver este problema, ya que no funcionará con un valor como "12.5000". – HoLyVieR

+0

@HoLyVieR: Sí, realmente depende de dónde provienen sus datos. La mayoría de los lenguajes de serialización de valores no se rellenarán con ceros a menos que así lo indique explícitamente. Dado que 'Number()' resuelve este tipo de problemas (con algunas advertencias propias) no es necesario hacer esto. – 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 
} 
Cuestiones relacionadas