JavaScript - Funcion mostrar numero muestra otro resultado

 
Vista:
Imágen de perfil de Marco

Funcion mostrar numero muestra otro resultado

Publicado por Marco (7 intervenciones) el 15/10/2022 07:43:48
Hola estoy queriendo hacer un función que devuelva el valor de un número de identificación pero me devuelve otro valor.

Se que si le pongo el numero con las comillas ("00414243") me lo va a reconocer como string, pero esa no es la idea, sino ingresar un número y que la función sepa que va a recibir un srting y reciba todos los valores sin ignorar los ceros a la izquierda, además en el primer resultado que tenía 2 ceros adelante me cambió completamente el número y eso por qué pasa?

msedge_JWeWm9hCqK
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Funcion mostrar numero muestra otro resultado

Publicado por Ivan (118 intervenciones) el 17/10/2022 19:26:17
Hola,

me ha sorprendido tu problema y me puse a investigar encontrando algo que no sabía :)

Resulta que en JavaScript los ceros a la izquierda tienen un significado ... Que el número tiene base octal o exagesimal !!

Sorprendente pero cierto, puedes encontrar información oficial aquí:
https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Numbers_and_dates

Creo que en tu caso no queda otra que tratar los números como string y usar parseInt (con base 10) cuando necesites cálculos matemáticos ...

1
2
3
4
5
6
<script>
      function mostrarDNI(numero) {
        console.log(parseInt(numero, 10));
      }
      mostrarDNI('00414243');
    </script>

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marco

Funcion mostrar numero muestra otro resultado

Publicado por Marco (7 intervenciones) el 18/10/2022 00:05:10
Muchas gracias por responder, voy a revisar esa información, la pregunta era por conocimientos ya que aún no me enfrento a esa problemática, y cuando lo haga tendré que controlar todo desde el ingreso de información e ir convirtiendo los según lo necesite.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gio
Val: 368
Bronce
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Funcion mostrar numero muestra otro resultado

Publicado por Gio (79 intervenciones) el 20/10/2022 01:45:23
Hola, los ceros a la izquierda no tienen ningún valor, por lo que se quitan por temas de optimización.

Si vas a trabajar con la función en consola, debes ingresarlos entre comillas simples ( ' ), dobles ( " ) o acentos graves ( ` ). Esto es para que se trate de un string y no de un valor numérico.

Si vas a obtener el valor desde un elemento input (HTML), no te preocupes porque la función lo recibirá con los ceros delante. Por ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<input type="number" id="DNI">
<input type="submit" id="DNI_BOTON">
 
<script>
    function mostrarDNI() {
        setTimeout(() => {
            var numero = document.getElementById("DNI").value;
 
            console.log(numero);
        }, 1);
    }
 
    //CUANDO SE HACE CLICK EN EL BOTON
    document.getElementById("DNI_BOTON").addEventListener("click", mostrarDNI);
</script>

Numero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marco

Funcion mostrar numero muestra otro resultado

Publicado por Marco (7 intervenciones) el 20/10/2022 02:48:05
msedge_hF8KjEwRna

Agradezco estas explicaciones, porque me ha servido para entender un poco más la lógica de Java Script.
Para este caso en concreto, la función empleada recibe un dato 00414243. Dicho dato, para efectos prácticos, debería ser tratado como una cadena, sin embargo, a la función se le entrega una sucesión de caracteres numéricos. La función entiende que dichos datos no son un texto, pero tampoco un número decimal, por eso los trata como otro tipo de dato, lo que creo es que Java Script ejecuta una función interna para identificar el tipo de dato (algo parecido al operador tipeof, pero más complejo).
Finalmente Java Script ha terminado interpretando el dato 00414243 como un número del sistema octal (que es otro sistema de numeración, como lo son: el decimal o el binario), ingresa dicho dato a la función en formato número octal y luego ejecuta la instrucción de escribir en consola dicho número, pero al hacerlo, retorna dicho número octal convertido al sistema decimal, y esto, creo que es, porque internamente Java Script tiene instrucciones predeterminadas para el retorno de datos.

Finalmente deduzco:
"que toda función por defecto es flexible al momento de recibir datos, y tratará los datos como los interprete"
"el console.log() tiene preestablecido los formatos para el retorno y entrega de datos"

Tal vez me esté equivocando en algo, pero es la explicación más razonable y lógica que encontré. Igualmente agradeceré cualquier información que me ayude a entender mejor la lógica de Java Script.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gio
Val: 368
Bronce
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Funcion mostrar numero muestra otro resultado

Publicado por Gio (79 intervenciones) el 20/10/2022 05:32:38
JavaScript resibe un dato de tipo texto cuando lo extrae de un input en el documento HTML, por mas que este tenga el atributo type="number".

Para pasar de un sistema no decimal a decimal, te propongo la siguiente función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function aDecimal(numero, base) {
    numero = Array.from(String(numero).toUpperCase());
    base = parseInt(base);
    var valor = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ];
 
    if (base > 1 && base < valor.length + 1) {
        var res = 0;
        var peso = 1;
 
        for (let i = numero.length - 1; i >= 0; i--) {
            let a = valor.indexOf(numero[i]);
 
            if (a != -1 && a < base) {
                res  += a * peso;
                peso *= base;
            } else {
                return false;
            }
        }
 
        return res;
    }
 
    return false;
}

Por ejemplo, para pasar el número octal 745 a decimal, pondrías lo siguiente:
1
aDecimal(745, 8);
Si te fijas, en el primer parámetro de la función introduces el número a ser transformado y en el segundo parámetro introduces en que sistema está el número ingresado (la base numérica).

Un ejemplo para pasar de un número hexadecimal a decimal sería el siguiente:
1
aDecimal("a12b6", 16);
En este caso, si o si debes ingresar el número entre comillas ya que contiene letras. En caso de llevar solo número, no es necesario ingresar el numero entre comillas.


Te adjunto un ejemplo de calculadora que te deja ingresar un número y especificar en que sistema numérico está.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marco

Funcion mostrar numero muestra otro resultado

Publicado por Marco (7 intervenciones) el 20/10/2022 05:40:43
msedge_MjzcCSGKk1

Excelente, acabo de probar la función y devuelve el valor convertido a decimal, gracias.

Hace unos días estuve practicando código y quise hacer una función que devuelva el tipo de valor, al final hice algo que me sirvió en el momento pero ahora que sé que Java Script trabaja con varios sistemas de numeración, voy a intentar mejorar mi función para que también identifique si es un número de otro sistema de numeración y diga a que sistema de numeración pertenece, por ejemplo para este número 00414243, mi función entregaría como respuesta 00414243 es un numero pero, lo que debería decir es que es un numero octal, para ser más específicos, que te parece?

code
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gio
Val: 368
Bronce
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Funcion mostrar numero muestra otro resultado

Publicado por Gio (79 intervenciones) el 20/10/2022 08:32:58
Interesante. Puedes detectar los distintos tipos de datos de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const tipoDeVariable = x => {
    let resultado = "desconocido";
 
    if (Number.isInteger(x))
        resultado = "numero entero";
 
    else if (Number.isFinite(x))
        resultado = "numero flotante";
 
    else if (Number.isNaN(x))
        resultado = "NaN";
 
    else if (x === undefined)
        resultado = "no definido";
 
    else if (Array.isArray(x))
        resultado = "array";
 
    else if (typeof x == "object")
        resultado = "objeto";
 
    else if (typeof x == "boolean")
        resultado = "booleano";
 
    else if (typeof x === "string")
        resultado = "texto";
 
    console.log(`La variable: "${x}" es de tipo ${resultado}.`)
};

tipo-de-variable
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar