Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/01/2016, 11:18
erpakillo
 
Fecha de Ingreso: diciembre-2014
Mensajes: 13
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Problema con decimales al hacer operaciones matemáticas

Y estas son las diferentes funciones javascript que utilizo para calcular primero el precio de las horas trabajadas, y después la suma del total de horas y del total del importe de las horas.

Código PHP:
function sumarhoras() { 
 var 
totalhoras=verificar("totalhoras"); 
 var 
horastrabajador1=verificar("horastrabajador1"); 
 var 
horastrabajador2=verificar("horastrabajador2");
 var 
horastrabajador3=verificar("horastrabajador3");
 var 
horastrabajador4=verificar("horastrabajador4");
 var 
horastrabajador5=verificar("horastrabajador5");
 var 
horastrabajador6=verificar("horastrabajador6");
 var 
horastrabajador7=verificar("horastrabajador7");
 var 
horastrabajador8=verificar("horastrabajador8");
 var 
horastrabajador9=verificar("horastrabajador9");
 var 
horastrabajador10=verificar("horastrabajador10");
 
   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totalhoras").value=parseFloat(horastrabajador1)+parseFloat(horastrabajador2)+parseFloat(horastrabajador3)+parseFloat(horastrabajador4)+parseFloat(horastrabajador5)+parseFloat(horastrabajador6)+parseFloat(horastrabajador7)+parseFloat(horastrabajador8)+parseFloat(horastrabajador9)+parseFloat(horastrabajador10); 
   
  } 
  function 
sumartrab1() { 
 var 
costehoratrabajador1=verificar("costehoratrabajador1"); 
 var 
horastrabajador1 =verificar("horastrabajador1");
 var 
totaltrabajador1=verificar("totaltrabajador1"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador1").value=parseFloat(horastrabajador1)*parseFloat(costehoratrabajador1); 
   
  } 
    function 
sumartrab2() { 
 var 
costehoratrabajador2=verificar("costehoratrabajador2"); 
 var 
horastrabajador2 =verificar("horastrabajador2");
 var 
totaltrabajador2=verificar("totaltrabajador2"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador2").value=parseFloat(horastrabajador2)*parseFloat(costehoratrabajador2); 
   
  } 
    function 
sumartrab3() { 
 var 
costehoratrabajador3=verificar("costehoratrabajador3"); 
 var 
horastrabajador3 =verificar("horastrabajador3");
 var 
totaltrabajador3=verificar("totaltrabajador3"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador3").value=parseFloat(horastrabajador3)*parseFloat(costehoratrabajador3); 
   
  } 
    function 
sumartrab4() { 
 var 
costehoratrabajador4=verificar("costehoratrabajador4"); 
 var 
horastrabajador4 =verificar("horastrabajador4");
 var 
totaltrabajador4=verificar("totaltrabajador4"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador4").value=parseFloat(horastrabajador4)*parseFloat(costehoratrabajador4); 
   
  } 
    function 
sumartrab5() { 
 var 
costehoratrabajador5=verificar("costehoratrabajador5"); 
 var 
horastrabajador5 =verificar("horastrabajador5");
 var 
totaltrabajador5=verificar("totaltrabajador5"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador5").value=parseFloat(horastrabajador5)*parseFloat(costehoratrabajador5); 
   
  }
    function 
sumartrab6() { 
 var 
costehoratrabajador6=verificar("costehoratrabajador6"); 
 var 
horastrabajador6 =verificar("horastrabajador6");
 var 
totaltrabajador6=verificar("totaltrabajador6"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador6").value=parseFloat(horastrabajador6)*parseFloat(costehoratrabajador6); 
   
  }  
    function 
sumartrab7() { 
 var 
costehoratrabajador7=verificar("costehoratrabajador7"); 
 var 
horastrabajador7 =verificar("horastrabajador7");
 var 
totaltrabajador7=verificar("totaltrabajador7"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador7").value=parseFloat(horastrabajador7)*parseFloat(costehoratrabajador7); 
   
  } 
    function 
sumartrab8() { 
 var 
costehoratrabajador8=verificar("costehoratrabajador8"); 
 var 
horastrabajador8 =verificar("horastrabajador8");
 var 
totaltrabajador8=verificar("totaltrabajador8"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador8").value=parseFloat(horastrabajador8)*parseFloat(costehoratrabajador8); 
   
  } 
    function 
sumartrab9() { 
 var 
costehoratrabajador9=verificar("costehoratrabajador9"); 
 var 
horastrabajador9 =verificar("horastrabajador9");
 var 
totaltrabajador9=verificar("totaltrabajador9"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador9").value=parseFloat(horastrabajador9)*parseFloat(costehoratrabajador9); 
   
  } 
    function 
sumartrab10() { 
 var 
costehoratrabajador10=verificar("costehoratrabajador10"); 
 var 
horastrabajador10 =verificar("horastrabajador10");
 var 
totaltrabajador10=verificar("totaltrabajador10"); 

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("totaltrabajador10").value=parseFloat(horastrabajador10)*parseFloat(costehoratrabajador10); 
   
  } 
      function 
importetotalhoras() { 
 var 
importetotalhoras =verificar("importetotalhoras");
 var 
totaltrabajador1=verificar("totaltrabajador1"); 
 var 
totaltrabajador2=verificar("totaltrabajador2"); 
  var 
totaltrabajador3=verificar("totaltrabajador3"); 
   var 
totaltrabajador4=verificar("totaltrabajador4"); 
    var 
totaltrabajador5=verificar("totaltrabajador5"); 
     var 
totaltrabajador6=verificar("totaltrabajador6"); 
      var 
totaltrabajador7=verificar("totaltrabajador7"); 
       var 
totaltrabajador8=verificar("totaltrabajador8"); 
        var 
totaltrabajador9=verificar("totaltrabajador9"); 
                 var 
totaltrabajador10=verificar("totaltrabajador10");
     

   
// realizamos la suma de los valores y los ponemos en la casilla del 
 // formulario que contiene el total
 
document.getElementById("importetotalhoras").value=parseFloat(totaltrabajador1)+parseFloat(totaltrabajador2)+parseFloat(totaltrabajador3)+parseFloat(totaltrabajador4)+parseFloat(totaltrabajador5)+parseFloat(totaltrabajador6)+parseFloat(totaltrabajador7)+parseFloat(totaltrabajador8)+parseFloat(totaltrabajador9)+parseFloat(totaltrabajador10); 
   
  } 
 
/** * Funcion para verificar los valores de los cuadros de texto. Si no es un * valor numerico, cambia de color el borde del cuadro de texto */
 
function verificar(id
 { 
 var 
obj=document.getElementById(id);
  if(
obj.value==""
  
value="0"
  else
  
value=obj.value
  if(
validate_importe(value,2))
   {
   
// marcamos como erroneo
    
obj.style.borderColor="#808080"
    return 
value;
     }else{
      
// marcamos como erroneo
       
obj.style.borderColor="#f00";       
       return 
0;                         
     } 
        }
         
/** * Funcion para validar el importe * Tiene que recibir: 
         * El valor del importe (Ej. document.formName.operator) 
         * Determina si permite o no decimales [1-si|0-no] 
         * Devuelve: 
         * true-Todo correcto 
         * false-Incorrecto 
         */
         
function validate_importe(value,decimal)
          { 
          if(
decimal==undefined
          
decimal=0
          if(
decimal==2)
           {
            
// Permite decimales tanto por . como por ,
             
var patron=new RegExp("^[0-9]+((,|\.)[0-9]{1,2})?$"); 
             }else{
              
// Numero entero normal
              
var patron=new RegExp("^([0-9])*$")
               } 
               if(
value && value.search(patron)==0
               { 
               return 
true
               } 
               return 
false;      
                } 
Perdón por el tocho.