Saltar al contenido

Truncar el número a dos decimales sin redondear

Siéntete libre de divulgar nuestra web y códigos con otro, apóyanos para hacer crecer esta comunidad.

Solución:

Convierte el número en un stringhaga coincidir el número hasta el segundo decimal:

function calc(theform) 
    var num = theform.original.value, rounded = theform.rounded
    var with2Decimals = num.toString().match(/^-?d+(?:.d0,2)?/)[0]
    rounded.value = with2Decimals
Original number:
"Rounded" number:

los toFixed método falla en algunos casos a diferencia de toStringasí que ten mucho cuidado con eso.

Actualización 5 de noviembre de 2016

Nueva respuesta, siempre precisa.

function toFixed(num, fixed) 
    var re = new RegExp('^-?\d+(?:.\d -1) + ')?');
    return num.toString().match(re)[0];

Como las matemáticas de coma flotante en javascript siempre tendrán casos extremos, la solución anterior será precisa la mayor parte del tiempo, lo que no es lo suficientemente bueno. Hay algunas soluciones a esto como num.toPrecision, BigDecimal.js y contabilidad.js. Sin embargo, creo que simplemente analizando el string será la más sencilla y siempre precisa.

Basando la actualización en la expresión regular bien escrita de la respuesta aceptada por @Gumbo, esta nueva función toFixed siempre funcionará como se esperaba.


Respuesta antigua, no siempre precisa.

Enrolle su propia función fija:

function toFixed(num, fixed) 
    fixed = fixed 

Opté por escribir esto para eliminar manualmente el resto con cadenas para no tener que lidiar con los problemas matemáticos que vienen con los números:

num = num.toString(); //If it's not already a String
num = num.slice(0, (num.indexOf("."))+3); //With 3 exposing the hundredths place
Number(num); //If you need it back as a Number

Esto le dará “15,77” con num = 15,7784514;

Tienes la opción de añadir valor a nuestra información aportando tu veteranía en las referencias.

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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