Foros del Web » Programando para Internet » Javascript »

Resto De División

Estas en el tema de Resto De División en el foro de Javascript en Foros del Web. Hola, estoy calculando el resto de una división con el operador "%". El problema que tengo es que al hacer 39.8 % 3.98 me da ...
  #1 (permalink)  
Antiguo 10/10/2010, 16:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 3 meses
Puntos: 1
Resto De División

Hola, estoy calculando el resto de una división con el operador "%".
El problema que tengo es que al hacer 39.8 % 3.98 me da 3.98 en lugar de darme 0. Porque?
  #2 (permalink)  
Antiguo 10/10/2010, 16:17
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: Resto De División

Hola:

Si no me equivoco, el operador % devuelve el módulo entre dos números enteros, así que con coma flotante no dá resultados fiables. De todos modos, la implementación de cosas matemáticas, aritméticas ecuacionales, etc. son muy básicas, así que si te importa la precisión, te recomiendo que recurras a lenguajes del servidor, o tal vez algo embebido como applets java, o tal vez flash (aunque dudo que sean buenas opciones)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 10/10/2010, 16:47
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Resto De División

Prueba con esta función:
Código Javascript:
Ver original
  1. function modulo(x,n){
  2.  var str;
  3.  if(parseFloat(x)!=parseInt(x)){
  4.   str=x.toString().split('.')[1].length;
  5.   x*=Math.pow(10,str);
  6.   n*=Math.pow(10,str);
  7.  }
  8.  if(parseFloat(n)!=parseInt(n)){
  9.   str=n.toString().split('.')[1].length
  10.   x*=Math.pow(10,str);
  11.   n*=Math.pow(10,str);  
  12.  }
  13.  return (x%n)/Math.pow(10,str);
  14. }
  15. alert(modulo(39.8,3.98));
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 10/10/2010, 19:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Resto De División

Cita:
Iniciado por _cronos2 Ver Mensaje
Prueba con esta función:
Código Javascript:
Ver original
  1. function modulo(x,n){
  2.  var str;
  3.  if(parseFloat(x)!=parseInt(x)){
  4.   str=x.toString().split('.')[1].length;
  5.   x*=Math.pow(10,str);
  6.   n*=Math.pow(10,str);
  7.  }
  8.  if(parseFloat(n)!=parseInt(n)){
  9.   str=n.toString().split('.')[1].length
  10.   x*=Math.pow(10,str);
  11.   n*=Math.pow(10,str);  
  12.  }
  13.  return (x%n)/Math.pow(10,str);
  14. }
  15. alert(modulo(39.8,3.98));
Saludos (:
Capo, anda perfecto la función. Tenés idea porque no funciona el operador directamente?
GRACIAS!
  #5 (permalink)  
Antiguo 11/10/2010, 05:17
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Resto De División

Pues no lo sé, hasta ahora no tenía ni idea de que no funcionaba con números decimales
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:33.