Comunidad de diseño web y desarrollo en internet online

Error raro al castear a Number

Citar            
MensajeEscrito el 17 Jun 2015 04:40 pm
Hola amigos vengo con un error de estos de tipo WTF!!

Bueno al grano

Código ActionScript :

//Todos estos traces devuelven NaN como debe ser
trace(Number("22129012A")); //Resultado ->  NaN
trace(Number("22129012B")); //Resultado ->  NaN
trace(Number("22129012C")); //Resultado ->  NaN
trace(Number("22129012D")); //Resultado ->  NaN
trace(Number("22129012F")); //Resultado ->  NaN
//...
//Pues bien si termina con la letra E devuelve el numero sin la letra y lo castea como number
//ejemplo
trace(Number("22129012E")); //Resultado ->  22129012

Así que esto me provoca un problema porque yo verifico los valores devuelto mediante el siguiente if

Código ActionScript :

trace(isNaN(Number("22129012F"))); //Resultado ->  True

Si es NaN es que no es un numero, es una cadena y en consecuencia obro según el tipo de valor que sea, pero claro con este caso me rompe la lógica de comportamiento.

Código ActionScript :

trace(Number("22129012E")); //Resultado ->  22129012 (Number) - Deberia devolver NaN


Alguien sabe porque sucede, si es un bug o si hay alguna solución sencilla? a mí se me ocurre sustraer el ultimo digito o carácter para verificar que no sea un letra E y si lo es hacerle un comprobación especifica pero me parece un poco chapuza la cosa.

Solisarg que opinas? :?

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

firefox
Citar            
MensajeEscrito el 17 Jun 2015 06:14 pm
La E forma parte de la notación científica, por ejemplo traza lo siguiente

trace(Number("100E30"))
trace(Number("100E"))

En el primer caso equivale a 1x10^32
En el segundo no tiene potencia, y simplemente ignora el operador científico

Estrictamente podría considerarse un bug, que automáticamente asume 1 como potencia y devuelve lo mismo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Jun 2015 08:54 am
Gracias, solisarg, pues vaya plan, me pasa que al introducir un nif con la letra E y hacer la comprobación se fastidia el nif, voy a tener que verificar de alguna manera la cadena.
Así a voz de pronto se me ocurre comparar la longitud de la cadena sin castear con la casteada a Number y si difiere devolver la cadena original sin castear como string.
tendré que tener en cuenta también los cast de las cadenas "01" que me devolverán 1

Bueno ya veré como lo arreglo :)
Un saludo


Un saludo

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.