Foros del Web » Programando para Internet » Javascript »

decimales otra vez

Estas en el tema de decimales otra vez en el foro de Javascript en Foros del Web. hace un tiempo Kaopectante me ayudo con un ejemplo de como hacer operaciones matematicas cada vez q se iba modificando los input y funcionaba perfectamente, ...
  #1 (permalink)  
Antiguo 25/11/2002, 16:27
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
decimales otra vez

hace un tiempo Kaopectante me ayudo con un ejemplo de como hacer operaciones matematicas cada vez q se iba modificando los input y funcionaba perfectamente, pero ahora tan solo quiero restar por lo cual acorte el ejemplo, pero tambien hace unos dias pregunte como poner decimales y el mismo Kaopectante me dijo que hiciera los siguiente

v1 = Math.floor(v1*100)/100

pero en el ejemplo de resta de los input no me toman los decimales
aqui esta el script
<script language="JavaScript">
function calcula(){
var val1, val2, res
val1 = parseInt(document.frm.ope1.value);
val2 = parseInt(document.frm.ope2.value);
if (isNaN(val1)) val1 = 0;
if (isNaN(val2)) val2 = 0;
res = val1 - val2;
document.frm.res.value = res;
}
</script>
</head>
<body>
<form name="frm">
<input type="text" id="ope1" name="ope1" onkeyup="calcula()">
<input type="text" id="ope2" name="ope2" onkeyup="calcula()">
=
<input type="text" name="res">


pero nose como hacerlo para q me muestre restando los decimales tambien

Si alguien sabe se agradece

De antemano Gracias
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 25/11/2002, 16:59
 
Fecha de Ingreso: noviembre-2002
Ubicación: 2600 metros mas cerca de las estrellas
Mensajes: 31
Antigüedad: 21 años, 5 meses
Puntos: 0
Código:
<script language="JavaScript">
function calcula(){
var val1, val2, res
val1 = document.frm.ope1.value;
val2 = document.frm.ope2.value;
if (isNaN(val1)) val1 = 0;
if (isNaN(val2)) val2 = 0;
res = val1 - val2;
document.frm.res.value = res;
}
</script>
</head>
<body>
<form name="frm">
<input type="text" id="ope1" name="ope1" onkeyup="calcula()">
<input type="text" id="ope2" name="ope2" onkeyup="calcula()">
=
<input type="text" name="res">
Lo que pasa es que utilizas parseInt(), y este convierte a Integer los numeros sin decimales, por lo que si escribes:

20.345 (recuerda que es con PUNTO(.), no con COMA(error comun))

al hacer:

parseInt(20.345)

Obtendras:

20
__________________
"trata a tus enemigos como tratas a tus amigos, y a tus amigos tratalos como tratas a tus enemigos"
  #3 (permalink)  
Antiguo 25/11/2002, 17:00
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Hola Bhonox.

Te respondo en teoría y si me da tiempo te ayudo con un ejemplo.

La función parseInt analiza un string y retorna un número entero (sin decimales).

Lo que deberías hacer, es preprocesar tus strings para saber en que posición tienen el punto decimal, segundo eliminarle dicho punto, tercero leerlos con parseInt y cuarto dividirlos entre cien (o mil, o diez mil) dependiendo de la posición del punto.

El resto queda igual.

Si puedo te preparo un ejemplo y te respondo, si no me da tiempo te lo mando mañana (a no ser que se me adelanten).

Saludos.
  #4 (permalink)  
Antiguo 25/11/2002, 18:35
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Bhonox, olvida todo lo que te dije, es mucho mas facil, usa la función parseFloat en lugar de parseInt y debe funcionar.

Saludos.
  #5 (permalink)  
Antiguo 26/11/2002, 06:24
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias Maklin y gracias nuevamente Kaopectante, cambie el ParseInt por ParseFloat y bien ademas aplique que a res fuera con dos decimales como me has dicho Kao..
osea
res = Math.floor(res * 100) / 100
ahora nose pq me da un resultado no fijo es decir

si pongo en la primera etiqueta 12.2 y en la otra 12.1 como diferencia me da 0.09 en vez de darme 0.1
le saque la funcion Math.floor y me salen mas numero 0.0999....

vere si puedo solucionarlo
debe existir alguna funcion de ROUND

Bueno gracias nuevamente
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #6 (permalink)  
Antiguo 26/11/2002, 06:32
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Exactamente Bhonox, donde dice Math.floor, pon Math.round y listo.

Saludos.
  #7 (permalink)  
Antiguo 26/11/2002, 06:37
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
gracias men yo ya llevaba como 10 lineas de codigo para redonderarlo y era solo cambiar eso jejej,
todos los dias se aprende algo nuevo
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
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 09:13.