Foros del Web » Programando para Internet » Javascript »

Suma de decimales

Estas en el tema de Suma de decimales en el foro de Javascript en Foros del Web. Tengo una función que suma números decimales, pero el problema surge cuando sumo números con un solo decimal, a veces me sale una ristra inmenso ...
  #1 (permalink)  
Antiguo 09/12/2005, 05:01
 
Fecha de Ingreso: noviembre-2005
Mensajes: 42
Antigüedad: 19 años, 1 mes
Puntos: 0
Exclamación Suma de decimales

Tengo una función que suma números decimales, pero el problema surge cuando sumo números con un solo decimal, a veces me sale una ristra inmenso de números del tipo: 3.00000009 por ejemplo. Lo raro es que solo pasa a veces. Cual puede ser la causa? Hay alguna forma de hacerle un redondeo solo a la parte decimal para que muestre como mucho 2 decimales? No me vale con truncar la cadena.

La función es:

Código PHP:
function totalesExp(){
    var 
campo;
    var 
tope;
    var 
filasGrupo;
    var 
filasParciales;
    var 
total 0;
    var 
value 0;
    var 
valorTope 0;
    
    for(
1<= (parseInt(document.getElementById('parcExp').value)); m++){
        
campo "filasGrExp" m;
        
filasGrupo parseInt(document.getElementById(campo).value) - 1;
        
campo "filasParcialExp" m;
        
filasParciales parseInt(document.getElementById(campo).value);
        for(
n=(filasParciales filasGrupo); n<filasParcialesn++){
            
campo "chkExperienciaBaremo" n;
            if(
document.getElementById(campo).checked == true){
                
campo "txtExpPuntuacion" n;
                
total += parseFloat(trim(document.getElementById(campo).value));
            }
        }
        
campo "parcialExp" m;
        
tope "topeExp" m;
        
valorTope parseFloat(document.getElementById(tope).value);
        
document.getElementById(campo).value total;

        if(
valorTope != "0"){
            if(
total valorTope){
                
alert("El valor de la puntuacion correspondiente a la autobaremacion para un grupo no puede pasar el tope del grupo, el valor será truncado");
                
document.getElementById(campo).value valorTope;
            }
        }
        
total 0;
        
        
//Aqui calculo el total
        
campo "parcialExp" m;
        
value += parseFloat(document.getElementById(campo).value);
    }
    return 
value;

  #2 (permalink)  
Antiguo 09/12/2005, 14:21
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 20 años, 2 meses
Puntos: 3
Eso es cosa del modo de cálculo interno del ordenador, pasa con ciertos números y es inevitable. Necesitas dar formato al resultado.
Busca en el foro o FAQ, pero básicamente para mostrar redondeado a 2 decimales debes multiplicar por 100, tomra la parte entera y dividir por 100.
__________________
Angel :cool:
  #3 (permalink)  
Antiguo 12/12/2005, 03:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 42
Antigüedad: 19 años, 1 mes
Puntos: 0
Muchas gracias angsanchez, la solución fue bastante similar a lo que proponías:

Multipliqué por 100, utilicé Math.round() y luego dividí por 100, con lo cual me daba el resultado redondeado tal y como yo quería.
  #4 (permalink)  
Antiguo 13/12/2005, 13:28
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 20 años, 2 meses
Puntos: 3
Estupendo. No me acordaba de Math.round(), pero es mejor que parseInt().
Lo importante era el modo de fijar el número de decimales.
__________________
Angel :cool:
  #5 (permalink)  
Antiguo 13/12/2005, 13:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Vaya, qué útil!! Y pensar que no haya una función que te muestre directamente el número de decimales que quieras...
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:49.