Aquí está el escenario: estoy recibiendo .9999999999999999cuando debería estar recibiendo 1.0. 
Puedo permitirme perder un lugar decimal de precisión, así que estoy usando .toFixed(15), qué tipo de funciona.
El redondeo funciona, pero el problema es que me dan 1.000000000000000. 
¿Hay alguna manera de redondear a varios lugares decimales, pero eliminar los espacios en blanco adicionales?
Nota: .toPrecisionno es lo que quiero; Solo quiero especificar cuántos números después del punto decimal. 
Nota 2: No puedo usar simplemente .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 lugares decimales como sea necesario (hasta 15).
                    
                        javascript
                                math
                                floating-point
                                rounding
                                
                    
                    
                        Nathan
fuente
                
                fuente

Respuestas:
>>> parseFloat(0.9999999.toFixed(4)); 1 >>> parseFloat(0.0009999999.toFixed(4)); 0.001 >>> parseFloat(0.0000009999999.toFixed(4)); 0fuente
-2.34.toFixed(1)retorna-2.3debido a la precedencia del operador .parseFloatfunción:+number.toFixed(13)esta expresión también se puede usar para eliminar imprecisiones de números de JavaScript como en 1.0000000000000045.Sí, hay una manera. Utilice
parseFloat().parseFloat((1.005).toFixed(15)) //==> 1.005 parseFloat((1.000000000).toFixed(15)) //==> 1Vea un ejemplo en vivo aquí: http://jsfiddle.net/nayish/7JBJw/
fuente
parseFloat("0.0000007"), lo que da"7e-7"Según tengo entendido, desea eliminar los ceros finales en 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.123fuente
...replace(/\.?0+$/, "");).0convierte en la cadena vacía"", y se-0convierte en-, ninguno de los cuales se espera (supongo). @ zach-snow su solución sugerida también falla en 0 y -0.Number(n.toFixed(15)) or +(n.toFixed(15))convertirá la cadena decimal de 15 posiciones en un número, eliminando los ceros finales.fuente
Si lanza el valor de retorno a un número, esos ceros finales se eliminarán. Esto también es menos detallado de lo que
parseFloat()es.+(4.55555).toFixed(2); //-> 4.56 +(4).toFixed(2); //-> 4Este utiliza el operador unario + , por lo que si se utiliza esto como parte de una operación de cadena es necesario tener un infijo + antes de que:
var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));. FYI un unario + delante de una cadena lo convierte en un Número. Desde MDN: Unary + puede:fuente
+(4.1).toFixed(4)está4.1en Chrome 60 .Ninguno de estos realmente me consiguió lo que estaba buscando según el título de la pregunta, que era, por ejemplo, que 5.00 fuera 5 y 5.10 fuera 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.0001Nota: la expresión regular solo funciona si
places > 0PD https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
fuente
5e30(cambia el número a5e3). ¡Los casos de esquina son diabólicos!Hay un método mejor que mantiene la precisión y también elimina los ceros. Esto requiere un número de entrada y, a través de un poco de magia, sacará los ceros finales. Descubrí que 16 es el límite de precisión para mí, lo cual es bastante bueno si no colocas un satélite en Plutón.
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));fuente
El
toFixed()método formatea anumberusando notación de punto fijo y devuelve astring.Aplica una estrategia de redondeo a la mitad .
(0.124).toFixed(2); // returns 0.12 (0.125).toFixed(2); // returns 0.13Como describió, de hecho también resultará en ceros finales (potencialmente innecesarios) a veces.
(0.001).toFixed(2); // returns 0.00Es posible que no desee deshacerse de esos ceros finales, esencialmente podría convertirlo de nuevo a
number. Hay muchas maneras de hacer esto.+(0.001).toFixed(2); // the shortestPara obtener una descripción general de los diferentes métodos para convertir cadenas en números, consulte esta pregunta, que tiene excelentes respuestas.
fuente