Problema con decimales en javascript

Tengo esta función javascript en una página jsp:
function calcularEfectTot() {
var numTit = document.insercionCompraForm.numTitCompr.value;
numTit = parseInt(numTit,10);
if (isNaN(numTit))
numTit = 0;
var precUnit = document.insercionCompraForm.precUnitCompr.value;
precUnit = parseFloat(precUnit);
if (isNaN(precUnit))
precUnit = 0;
var efectTot = numTit * precUnit;
document.insercionCompraForm.efectTotCompr.value = efectTot;
}
El problema está en que el valor de 'efectTot' es, por ejemplo, 12 * 5.3 = 63.5999..., o también, 12 * 5.4 = 64.8000.... ¿Por qué esos resultados no son 63.6 y 64.8? ¿Cómo puedo conseguirlos? ¿Cómo puedo truncar o redondear en javascript? (Para el primer caso no me valdría esa solución!)
Y si yo quisiera guardar en la variable 'precUnit' un valor double, ¿cómo lo hago?, puesto que parseDouble() no existe, ¿no? Cómo se transforma un string en un double en javascript? Y otra cosa más. Cómo válido del lado del cliente un campo double si en el paquete org. Apache.commons.validator.javascript de la librería commons-¿Validator.jar no aparece validateDouble.js? Si que está validateInteger.js y validateFloat.js, pero... ¿y si trabajo con double?

1 respuesta

Respuesta
1
Vamos por puntos:
1. Redondear decimales
Puedes usar la siguiente función:
// Redondea el número 'num' a 'ndec' decimales.
function redond(num, ndec) {
  var fact = Math.pow(10, ndec); // 10 elevado a ndec
  /* Se desplaza el punto decimal ndec posiciones,
se redondea el número y se vuelve a colocar
el punto decimal en su sitio. */
  return Math.round(num * fact) / fact;
}
2. TRUNCAR NÚMEROS
Para quitar todos los decimales, usa parseInt. Para dejar el número de decimales que quieras sin redondear, puedes usar la siguiente función:
// Trunca el número 'num' a 'ndec' decimales.
function trunc(num, ndec) {
  var fact = Math.pow(10, ndec); // 10 elevado a ndec
  /* Se desplaza el punto decimal ndec posiciones,
se trunca el número y se vuelve a colocar
el punto decimal en su sitio. */
  return parseInt(num * fact) / fact;
}
3. DOUBLE
En JSP y JavaScript se trabaja con valores Float, no Double. Se pierde un poco de precisión, pero la diferencia es inapreciable.
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas