javascript Number.isInteger(10.0) retorna false

Iniciado por SrTrp, 1 Mayo 2020, 22:05 PM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno quiero saber si un numero es entero, para ello la variable que uso esta en un arreglo y pasa por varios métodos.
les pondré desde la inicialización hasta donde me retorna false.
Código (javascript) [Seleccionar]

//aqui la creo
var posPy = [550, 11];

//aqui esta en un metodo donde empiezo a crear valores de decimal
posPy = [posPy[0] - tplayer, posPy[1] - 0.2];
posPy[1] = posPy[1].toFixed(1);  //solo quiero dejar un decimal por que me botana por ejemplo 10.8,10.700000000004,10.600000000002  y así iba por ello obte de que solo aceptara un decimal


//aqui el ultimo metodo donde la uso
var y = this.posPy[1];
    console.log(y+", Estado="+Number.isInteger(this.posPy[1]));
    if(Number.isInteger(this.posPx[1]) && Number.isInteger(this.posPy[1])){
//AQUI JAMAS ENTRA POR QUE SIEMPRE ME RETORNA FALSE
//inclusive llegue a pensar que no aceptaba numeros como 2.0, 9.0 pero hice un test manuel y si retorna true esos numeros


MinusFour

Number.prototype.toFixed siempre regresa un string. Lo más probable es que tengas un string "11.0" en lugar del número 11.

@XSStringManolo

En tu ejemplo no tienes posPx definido en ningún sitio.

Haz un: alert(typeof(this.posPx[1])); justo antes del if, a ver si es un número o un objeto, o algo distinto.
Si usas por ejemplo new Number(10) estás creando un objeto, no un tipo number primitivo.
Ten cuidado con tu código y las conversiones implícitas. Estaría bien que pusieras todo el código si no es excesivamente grande para poder ver cual es el problema.


Probablemente si haces esto:
posPy[1] = +(posPy[1].toFixed(1));
se te solucione.

SrTrp

Gracias no tenia idea de que retornaba  string, pero ya lo arregle como me menciono @XSStringManolo
el posPx no omiti por que hacía el mismo procedimiento que posPy