Saltar al contenido

javascript: cómo evitar que toFixed redondee números decimales

Esta reseña fue probado por nuestros expertos para que tengas la seguridad de la exactitud de nuestro contenido.

Solución:

Eso es aún más simple:

function truncateToDecimals(num, dec = 2) 
  const calcDec = Math.pow(10, dec);
  return Math.trunc(num * calcDec) / calcDec;

Asi que:

truncateToDecimals(123456.786) -> 123456.78

Redondea el número (hacia abajo) al centavo más cercano primero:

val = Math.floor(100 * val) / 100;

EDITAR Se ha señalado que esto falla para, por ejemplo, 1.13. ¡Debería haberlo sabido mejor yo mismo!

Esto falla porque la representación de coma flotante interna de 1,13 es muy ligeramente menor que 1,13: multiplicar eso por 100 no produce 113 sino 112,99999999999998578915 y luego redondearlo hacia abajo lo lleva a 1,12

Después de volver a leer la pregunta, parece que realmente solo está tratando de realizar la validación de entrada (ver a continuación), en cuyo caso debe usar técnicas de validación de formulario normales y no debe usar .toFixed() en absoluto. Esa función es para presentación números, no calcular con ellos.

$('#txtAmount').on('keypress', function (e)  v.length === 0)) 
        return false;
    
);

puedes intentarlo, no redondeará tus decimales

/**
 * @param any input 
 * @param number decimals 
 */
var toFixed = function(input, decimals) 
  var arr = ("" + input).split(".");
  if (arr.length === 1) return input;
  var int = arr[0],
      max = arr[1].length,
      dec = arr[1].substr(0, decimals > max ? max : decimals);
  return decimals === 0 ? int : [int, "." , dec].join("");

Reseñas y valoraciones del tutorial

Agradecemos que quieras añadir valor a nuestro contenido añadiendo tu experiencia en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *