Foros del Web » Programando para Internet » Javascript »

Numeros flotantes

Estas en el tema de Numeros flotantes en el foro de Javascript en Foros del Web. Hola amigos foreros... Tengo la siguiente detalle en estas líneas de código: function calculo() { var a=document.form1.nro_dias.value; var b=document.form1.dias1.value; var c=document.form1.UT.value; var d=document.form1.ctte.value; var e=document.form1.nro_dias.value; ...
  #1 (permalink)  
Antiguo 09/03/2011, 14:38
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Numeros flotantes

Hola amigos foreros...

Tengo la siguiente detalle en estas líneas de código:

function calculo()
{
var a=document.form1.nro_dias.value;
var b=document.form1.dias1.value;
var c=document.form1.UT.value;
var d=document.form1.ctte.value;
var e=document.form1.nro_dias.value;
document.form1.dias1.value=a;
var j=eval(a*c*d);
document.form1.precio_dias.value=j;
var f=document.form1.dias2.value;
var g=document.form1.UT2.value;
var h=document.form1.ctte2.value;
var i=eval(f*g*h);
var k=eval(j+i);
document.form1.precio_pasaje.value=i;
document.form1.precio_total.value=k;
document.form1.monto.value=k;

}

Arroja el siguiente resultado en varias oportunidades:

2040.5000000000002

La pregunta es... ¿Como hago para redondear los valores después del punto?

Algo así: 2040.5
  #2 (permalink)  
Antiguo 09/03/2011, 14:49
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Numeros flotantes

usa toFixed(numero de decimales)
  #3 (permalink)  
Antiguo 09/03/2011, 15:06
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

No ha servido esa función... el valor que devuelve los valores es cuando se realiza ese producto

var j=eval(a*c*d);
  #4 (permalink)  
Antiguo 09/03/2011, 15:10
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Numeros flotantes

por qué usas eval??
Cita:
var j = (parseFloat(a*c*d)).toFixed(2)
  #5 (permalink)  
Antiguo 09/03/2011, 15:22
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

porque es la forma de hacer operaciones matemáticas que estaba en la guía del curso de Javascript =)
  #6 (permalink)  
Antiguo 09/03/2011, 15:30
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Numeros flotantes

Pues vaya libro ... XD Supongo que no tiene mayor importancia hacerlo en este ejemplo para calcular con JS, pero digamos que no es muy recomendable usar eval.
Saludos :D
__________________
" 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
  #7 (permalink)  
Antiguo 09/03/2011, 15:33
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Numeros flotantes

sí, bueno, no te lo creas todo. cual es esa guía??
  #8 (permalink)  
Antiguo 09/03/2011, 16:10
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

hice lo siguiente:
var j = (parseFloat(a*c*d)).toFixed(2)
var i=(parseFloat(f*g*h)).toFixed(2);
var k=(parseFloat(j+i)).toFixed(2);

y todavía sigue apareciendo ese número punto flotante; probando distintos valores me aparece algo fuera de lo común:

1150.71 + 112.65 = 1273.3600000000001

No sé que estará pasando =S
  #9 (permalink)  
Antiguo 09/03/2011, 16:32
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Numeros flotantes

Cita:
1150.71 + 112.65 = 1273.3600000000001
En Chrome
Cita:
alert(parseFloat(1150.71 + 112.65).toFixed(2)); // 1263.36
En FF e IE no he probado pero no creo que te añadan ese 0.00...01 porque sí.
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
  #10 (permalink)  
Antiguo 07/11/2011, 12:28
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

Después de seis meses por fin pude resolver el problema, tuve que repasar este tutorial que encontré en otro tema, y así quedó el código

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function calculopasaje()
  3. {
  4.     var a=parseFloat(document.getElementById("nro_dias").value);
  5.     var b=parseFloat(document.getElementById("dias1").value);
  6.     var c=parseFloat(document.getElementById("UT").value);
  7.     var d=parseFloat(document.getElementById("ctte").value);
  8.     var e=parseFloat(document.getElementById("nro_dias").value);
  9.     var j=(a*c*d);
  10.     document.getElementById("dias1").value=a;
  11.     document.getElementById("precio_dias").value=j;
  12.     var f=parseFloat(document.getElementById("dias2").value);
  13.     var g=parseFloat(document.getElementById("UT2").value);
  14.     var h=parseFloat(document.getElementById("ctte2").value);
  15.     var i=(f*g*h);
  16.     var k=parseFloat(i.toFixed(2))+parseFloat(j.toFixed(2));
  17.     document.getElementById("precio_pasaje").value=i;  
  18.     document.getElementById("precio_total").value=k.toFixed(2);
  19.     document.getElementById("monto").value=k.toFixed(2);
  20. }
  21. </script>

Y funciona a la perfección :>
  #11 (permalink)  
Antiguo 07/11/2011, 14:01
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Numeros flotantes

Funcionará pero no deja de ser horrible.

Que se supone que es la variable g? y la h? Los nombres de variables DEBEN tener coherencia semántica con su contenido.

Tarea: Reescribir el script nombrando las variables según su contenido.
__________________
blog | @aijoona
  #12 (permalink)  
Antiguo 07/11/2011, 14:19
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Numeros flotantes

Cita:
Iniciado por Aijoona
Funcionará pero no deja de ser horrible.
Exacto, tengo que reconocer que ni si quiera paré a leer el código D:
Debes entender que si quieres que leamos/comprobemos algo no puedes poner esos nombres a las variables; incluso cuando tú dentro de x tiempo necesites ver el archivo otra vez verás que es imposible entenderlo. Para hacerle un poco de publicidad a @Aijoona http://blog.aijoona.com/2011/05/05/comenta-el-codigo/
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
  #13 (permalink)  
Antiguo 07/11/2011, 14:23
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

Por donde lo veas es HORRIBLE

Vamos a complacerte =>

Código Javascript:
Ver original
  1. document.getElementById("precio_dias").value=(parseFloat(document.getElementById("nro_dias").value)*parseFloat(document.getElementById("UT").value)*parseFloat(document.getElementById("ctte").value)).toFixed(2);
  2.  
  3. document.getElementById("precio_pasaje").value= (parseFloat(document.getElementById("dias2").value)*parseFloat(document.getElementById("UT2").value)*parseFloat(document.getElementById("ctte2").value)).toFixed(2);
  4.  
  5. document.getElementById("monto").value=(parseFloat(document.getElementById("nro_dias").value)*parseFloat(document.getElementById("UT").value)*parseFloat(document.getElementById("ctte").value)).toFixed(2)+(parseFloat(document.getElementById("dias2").value)*parseFloat(document.getElementById("UT2").value)*parseFloat(document.getElementById("ctte2").value)).toFixed(2);

Creo que es preferible seguir con mi notación de variables :>

Cita:
incluso cuando tú dentro de x tiempo necesites ver el archivo otra vez verás que es imposible entenderlo
6 meses después sabía exactamente lo que hacía el código :>

Última edición por Sirrohan; 07/11/2011 a las 14:33
  #14 (permalink)  
Antiguo 07/11/2011, 14:54
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Numeros flotantes

No, no es preferible. De hecho hasta estás teniendo variables inutiles y es algo que no notás por tu sintaxis (caso variables b y e).

Con un pequeño refactor (no aseguro que ande, es algo rapido):

Código Javascript:
Ver original
  1. function calculopasaje() {
  2.     function value(id, val) {
  3.         document.getElementById(id).value = val;
  4.     }
  5.  
  6.     function floatValue(id) {
  7.         return parseFloat(document.getElementById(id).value);
  8.     }
  9.  
  10.     var
  11.         nroDias = floatValue("nro_dias"),
  12.         inicio = (nroDias * floatValue("UT") * floatValue("ctte")),
  13.         fin = (floatValue("dias2") * floatValue("UT2") * floatValue("ctte2")),
  14.         total = parseFloat(fin.toFixed(2)) + parseFloat(inicio.toFixed(2));
  15.  
  16.     value("dias1", nroDias);
  17.     value("precio_dias", inicio);
  18.     value("precio_pasaje", fin);
  19.     value("precio_total", total.toFixed(2));
  20.     value("monto", total.toFixed(2));
  21. }
__________________
blog | @aijoona
  #15 (permalink)  
Antiguo 07/11/2011, 14:59
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Numeros flotantes

Cita:
Iniciado por Aijoona Ver Mensaje
No, no es preferible. De hecho hasta estás teniendo variables inutiles y es algo que no notás por tu sintaxis (caso variables b y e).

Con un pequeño refactor (no aseguro que ande, es algo rapido):

Código Javascript:
Ver original
  1. function calculopasaje() {
  2.     function value(id, val) {
  3.         document.getElementById(id).value = val;
  4.     }
  5.  
  6.     function floatValue(id) {
  7.         return parseFloat(document.getElementById(id).value);
  8.     }
  9.  
  10.     var
  11.         nroDias = floatValue("nro_dias"),
  12.         inicio = (nroDias * floatValue("UT") * floatValue("ctte")),
  13.         fin = (floatValue("dias2") * floatValue("UT2") * floatValue("ctte2")),
  14.         total = parseFloat(fin.toFixed(2)) + parseFloat(inicio.toFixed(2));
  15.  
  16.     value("dias1", nroDias);
  17.     value("precio_dias", inicio);
  18.     value("precio_pasaje", fin);
  19.     value("precio_total", total.toFixed(2));
  20.     value("monto", total.toFixed(2));
  21. }
Whoooaaaooo.... Pero como ya comenté más arriba (meses atrás), mis nociones de javascript son de un curso desactualizado, hasta se podría decir obsoleto...

De todos modos, gracias por el apoyo ;)

Etiquetas: flotantes, numeros
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:29.