parte - redondear decimales javascript
JavaScript: Redondee a un nĂºmero de decimales, pero quite ceros adicionales (8)
Hay un método mejor que mantiene la precisión y también quita los ceros. Esto requiere un número de entrada y, a través de magia de fundición, sacará los ceros finales. He encontrado que 16 es el límite de precisión para mí, que es bastante bueno si no se pone un satélite en pluto.
function convertToFixed(inputnum)
{
var mynum = inputnum.toPrecision(16);
//If you have a string already ignore this first line and change mynum.toString to the inputnum
var mynumstr = mynum.toString();
return parseFloat(mynumstr);
}
alert(convertToFixed(6.6/6));
Aquí está el escenario: estoy recibiendo .9999999999999999
cuando debería obtener 1.0
.
Puedo permitirme perder un decimal de precisión, así que estoy usando .toFixed(15)
, que funciona.
El redondeo funciona, pero el problema es que me dieron 1.000000000000000
.
¿Hay alguna manera de redondear a un número de decimales, pero quitar espacios en blanco adicionales?
Nota: .toPrecision
no es lo que quiero; Solo quiero especificar cuántos números después del punto decimal.
Nota 2: No puedo usar .toPrecision(1)
porque necesito mantener la alta precisión para los números que realmente tienen datos después del punto decimal. Idealmente, habría exactamente tantos decimales como sea necesario (hasta 15).
Mmmm, una pequeña respuesta diferente, para cross browser también:
function round(x, n) {
return Math.round(x * Math.pow(10, n)) / Math.pow(10, n)
}
Ninguno de estos realmente me consiguió lo que estaba buscando basado en el título de la pregunta, que era, por ejemplo, para 5.00 para ser 5 y 5.10 para ser 5.1. Mi solución fue la siguiente:
num.toFixed(places).replace(//.?0+$/, '''')
''5.00''.replace(//.?0+$/, '''') // 5
''5.10''.replace(//.?0+$/, '''') // 5.1
''5.0000001''.replace(//.?0+$/, '''') // 5.0000001
''5.0001000''.replace(//.?0+$/, '''') // 5.0001
Nota: la expresión regular solo funciona si places > 0
PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
Sí, hay una manera. Use parseFloat()
.
parseFloat((1.005).toFixed(15)) //==> 1.005
parseFloat((1.000000000).toFixed(15)) //==> 1
Vea un ejemplo en vivo aquí: http://jsfiddle.net/nayish/7JBJw/
Según tengo entendido, desea eliminar los ceros finales de la cadena que obtuvo a través de toFixed()
. Esta es una operación de cadena pura:
var x = 1.1230000;
var y = x.toFixed(15).replace(/0+$/, ""); // ==> 1.123
Si arroja el valor de retorno a un número, esos ceros finales se descartarán. Esto también es menos detallado que parseFloat()
es.
+(4.55555).toFixed(2);
//-> 4.56
+(4).toFixed(2);
//-> 4
Esto utiliza el operador unario + , por lo que si se usa esto como parte de una operación de cadena, se necesita tener un infijo + antes de él: var n=0.9999999999999999; console.log(''output '' + +n.toFixed(2));
var n=0.9999999999999999; console.log(''output '' + +n.toFixed(2));
. Para su información, unario + delante de una cadena lo convierte en un Número. Desde MDN: Unary + puede:
convierte representaciones de cadena de enteros y flotantes, así como los valores que no son cadenas true, false y null. Se admiten enteros en formato decimal y hexadecimal ("0x" -prefixed). Los números negativos son compatibles (aunque no para hexadecimal). Si no puede analizar un valor particular, evaluará a NaN.
Number(n.toFixed(15)) or +(n.toFixed(15))
convertirá la secuencia decimal de 15 posiciones en un número, eliminando los ceros finales.
>>> parseFloat(0.9999999.toFixed(4));
1
>>> parseFloat(0.0009999999.toFixed(4));
0.001
>>> parseFloat(0.0000009999999.toFixed(4));
0