2012-03-02 30 views
8

¿Por qué es esta diferencia de comportamiento entre parseInt() y parseFloat()?Diferencia de comportamiento entre parseInt() y parseFloat()

Tengo una cadena que contiene 08 en ella.

Cuando escribo este código: se genera

alert(hfrom[0]); 
alert(parseInt(hfrom[0])); 
alert(parseFloat(hfrom[0])); 

La siguiente salida:

08 
0 
8 

¿Por qué parseInt y parseFloat regreso dos resultados diferentes en este caso?

+1

Comprobar la presente OS mensaje: http://stackoverflow.com/questions/6900857/alertparseint09-shows-me-0-why Esto se debe a que parseInt asume 08 para analizarse como base Octal, ya que comienza con 0 – Chandu

+0

Al ejecutar en jsfilddle en cromo, obtengo '8' para ambas funciones: http://jsfiddle.net/ nqNvw/ – gideon

+2

@gideon, eso se debe a que pasaste números que ya se convirtieron a enteros de base 10. Si pasa * strings * se comporta de manera diferente. Ver: http://jsfiddle.net/nqNvw/1/ (este es definitivamente un tipo de cosas wtfjs) –

Respuesta

10

parseInt() asume la base de su número según los primeros caracteres de la cadena. Si comienza con 0x, asume la base 16 (hexadecimal). De lo contrario, si comienza con 0 asume base 8 (octal). De lo contrario, asume la base 10.

Puede especificar la base como un segundo argumento:

alert(parseInt(hfrom[0], 10)); // 8 

De MDN (vinculado arriba):

Si radix es indefinido o 0, JavaScript asume la siguiente:

Si la cadena de entrada comienza con "0x" o "0X", radix es 16 (hexadecimal). Si la cadena de entrada comienza con "0", radix es ocho (octal). Esta característica no es estándar, y algunas implementaciones deliberadamente no la admiten (en cambio, usan el radix 10). Para este razón siempre especifique una raíz cuando se usa parseInt. Si la cadena de entrada comienza con cualquier otro valor, la raíz es 10 (decimal).

+0

También vea la sección de ** Ejemplos ** en esa página. – Paulpro

2

siempre debe incluir el parámetro radix con parseInt() ex parseInt('013', 10) de lo contrario, puede convertirla en una base numérica diferente:

parseInt('013') === 11 
parseInt('013', 10) === 13 
parseInt('0x13') === 19