Javascript - Comprobar par o impar

c0rs0

Hola, estoy aprendiendo a programar en JavaScript y me estoy volviendo loco con un ejercicio, la verdad que es bastante simple, se trata de comprobar si un número es par o impar.
Primero compruebo que me están pasando un número entero y luego divido el número entre dos y con la misma función compruebo si el número es entero o no, si al dividir entre dos me da un número entero es par y si no es impar.
Al comprobar si el número es entero la función lo hace correctamente, pero luego una vez divido el número entre dos la función siempre me devuelve "true" independientemente de que el número me de 2.5 ó 3.5 o cualquier número decimal.
A ver si me podéis decir en qué estoy fallando, muchas gracias.

function pantalla() {
	var numero = prompt ("Escribir un número entero:","0");
	return numero;
}

function esEntero(valor)
{
   k="0123456789 ";
   for (j=0;j<valor.length;j++) 
   {
     if (k.indexOf(valor.charAt(j)) == -1) {
     	return false;
     }
   }
   return true; 
}

var numero = pantalla();

while (!esEntero(numero)){
	numero = pantalla();	
}

numero = numero / 2;

if (esEntero(numero)) {
	alert("Es un número par.");
}
else {
	alert("Es un número impar.");
}
B

#1 http://www.java2s.com/Tutorial/JavaScript/0040__Operators/Modulus.htm

1
P

Un número es par si el resto de dividirlo entre dos es cero. Desconozco si en Javascript existe "%" pero en C++ sería así:

if (a%2==0) printf("Es par" );
else printf("No es par" );

Si el resto de dividir a entre 2 es 0, mostrar por pantalla "Es par". Si no, mostrar "No es par".

neil90
> var fpn = 62.5;
fpn
62.5
fpn.charAt(0)
TypeError: Object 62.5 has no method 'charAt'

Estás intentado tratar un número decimal cómo si fuese un array de caracteres.
Como ya te han dicho, utiliza el operador módulo:

> fpn = 125.0
125
fpn % 2 == 0
false
fpn = 124.0
124
fpn % 2 == 0
true

Pd. http://en.wikipedia.org/wiki/Modulo_operation

#5 El sistema de tipos de JavaScript es dinámico, y al asignarle un valor leído del teclado lo toma como string, mientras que para realizar la división, el intérprete pasa a considerar la variable como number, y para este tipo de objeto, el método charAt no existe.

1 respuesta
c0rs0

Ok, utilizaré el operador módulo. Muchas gracias.

De todas formas me raya un poco que al principio del script me funcione bien la función y luego me funcione mal..

#4 Muchas gracias por la respuesta, ahora sí que me queda claro.

1 respuesta

Usuarios habituales