Supongamos que tengo un valor de 15.7784514, quiero mostrarlo 15.77 sin redondeo.
var num = parseFloat(15.7784514);
document.write(num.toFixed(1)+"<br />");
document.write(num.toFixed(2)+"<br />");
document.write(num.toFixed(3)+"<br />");
document.write(num.toFixed(10));
Resultados en -
15.8
15.78
15.778
15.7784514000
¿Cómo muestro 15.77?
javascript
tempid
fuente
fuente
Respuestas:
Convierta el número en una cadena, haga coincidir el número con el segundo decimal:
El
toFixed
método falla en algunos casos a diferenciatoString
, así que tenga mucho cuidado con él.fuente
toFixed
, sin embargo, así:(Math.floor(value * 100) / 100).toFixed(2)
. Como probablemente sepa, pueden ocurrir cosas extrañas de precisión con los valores de coma flotante (y en el otro lado del espectro, si el número es15
, suena como lo quiere el OP15.00
).Number((15.7784514000*100).toString().match(/^\d+/)/100);
Actualización 5 nov 2016
Nueva respuesta, siempre precisa
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 para esto
num.toPrecision
, como BigDecimal.js y accounting.js . Sin embargo, creo que simplemente analizar la cadena será la más simple 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.
Antigua respuesta, no siempre precisa.
Roll su propia función toFixed:
fuente
toFixed(0.0000000052, 2)
rinde '5.2'. Esto se puede solucionar usando elreturn num.toFixed(fixed+1).match(re)[0];
Aviso que estoy usando para Fijar con un decimal encima del objetivo para evitar el redondeo, luego ejecutando su coincidencia deOpté 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:
Esto le dará "15.77" con num = 15.7784514;
fuente
Octubre de 2017
Solución general para truncar (sin redondear) un número al enésimo dígito decimal y convertirlo en una cadena con exactamente n dígitos decimales, para cualquier n≥0.
donde x puede ser un número (que se convierte en una cadena) o una cadena.
Aquí hay algunas pruebas para n = 2 (incluida la solicitada por OP):
* Como se menciona en la nota, eso se debe a la conversión implícita de JavaScript en exponencial para "1.99e-7" y para algunos otros valores de n:
fuente
toFixedTrunc(0.000000199, 2) // 1.99
parseInt es más rápido que Math.floor
fuente
Esto devolverá 19.66
fuente
Simple haz esto
fuente
Estas soluciones funcionan, pero me parecen innecesariamente complicadas. Personalmente, me gusta usar el operador de módulo para obtener el resto de una operación de división, y eliminar eso. Suponiendo que num = 15.7784514:
Esto es equivalente a decir num = num - (num% .01).
fuente
Las respuestas aquí no me ayudaron, seguían redondeando o dándome el decimal incorrecto.
mi solución convierte su decimal en una cadena, extrae los caracteres y luego lo devuelve todo como un número.
fuente
Mi versión para números positivos:
Rápido, bonito, obvio. (versión para números positivos)
fuente
-0.7752
. Pruebe quetoFixed_norounding(-0.7752,2)
regrese en-0.78
lugar de-0.77
El siguiente código funciona muy bien para mí:
fuente
-?
;)Lo arreglé usando la siguiente manera simple:
Los resultados serán 15.77
fuente
-15.7784514
devoluciones-15.78
Solo trunca los dígitos:
fuente
Otra solución de línea única:
Utilicé 100 porque quieres truncar al segundo dígito, pero una solución más flexible sería:
donde dígitos es la cantidad de dígitos decimales para mantener.
Consulte las especificaciones de Math.trunc para obtener detalles y compatibilidad del navegador.
fuente
Aquí estás. Una respuesta que muestra otra forma de resolver el problema:
Tenga en cuenta el uso de + antes de la expresión final. Eso es convertir nuestra cadena truncada y cortada de nuevo al tipo de número.
¡Espero eso ayude!
fuente
truncar sin ceros
o
prueba:
truncar con ceros
prueba:
fuente
Esto funcionó bien para mí. Espero que también solucione sus problemas.
fuente
La siguiente es una manera fácil de hacerlo, pero es necesario asegurarse de que el parámetro cantidad se proporcione como una cadena.
}
fuente
fuente
Solía
(num-0.05).toFixed(1)
tener el segundo decimal en el suelo.fuente
Mi solución en mecanografiado (se puede portar fácilmente a JS):
Casos de prueba:
¿Alguna mejora?
fuente
Haga rodar su propia
toFixed
función: para valores positivosMath.floor
funciona bien.Para valores negativos
Math.floor
es redondo de los valores. Entonces puedes usarMath.ceil
en lugar.Ejemplo,
fuente
La segunda solución de Gumbo, con la expresión regular, funciona pero es lenta debido a la expresión regular. La primera solución de Gumbo falla en ciertas situaciones debido a la imprecisión en los números de coma flotante. Vea el JSFiddle para una demostración y un punto de referencia. La segunda solución toma alrededor de 1636 nanosegundos por llamada en mi sistema actual, CPU Intel Core i5-2500 a 3.30 GHz.
La solución que he escrito implica agregar una pequeña compensación para ocuparse de la imprecisión de coma flotante. Es básicamente instantáneo, es decir, del orden de nanosegundos. Registré 2 nanosegundos por llamada, pero los temporizadores de JavaScript no son muy precisos ni granulares. Aquí está el JS Fiddle y el código.
fuente
Sobre la base de la respuesta de David D :
fuente
Es más confiable obtener dos puntos flotantes sin redondear.
Respuesta de referencia
Gracias !
fuente
Ya hay alguna respuesta adecuada con expresión regular y cálculo aritmético, también puede intentar esto
fuente
Esto es lo que se hizo con una cuerda
fuente
Todas estas respuestas parecen un poco complicadas. Simplemente restaría 0.5 de su número y usaría toFixed ().
fuente
La solución más eficiente (para 2 dígitos de fracción) es restar 0.005 antes de llamar
toFixed()
Los números negativos también se redondearán hacia abajo (lejos de cero). El OP no dijo nada sobre números negativos.
fuente
Sé que ya hay pocos ejemplos de trabajo, pero creo que vale la pena proponer mi equivalente String.toFixed, algunos pueden encontrarlo útil.
Esa es mi alternativa toFixed, que no redondea los números, solo los trunca o agrega ceros de acuerdo con la precisión dada. Para un número extralargo, utiliza el redondeo incorporado JS cuando la precisión es demasiado larga. La función funciona para todos los números problemáticos que he encontrado en la pila.
Tenga en cuenta que la precisión puede no manejarse correctamente para números de longitud 18 y mayores, por ejemplo, Chrome de 64 bits lo redondeará o agregará "e +" / "e-" para mantener la longitud del número en 18.
Si desea realizar operaciones con números reales, es más seguro multiplicarlo
Math.sqrt(10, precision)
primero, hacer los cálculos y luego el resultado de la inmersión por el valor del multiplicador.Ejemplo:
Es por eso que es tan importante usar ese multiplicador / divisor cuando se trata de números reales en JavaScript, especialmente cuando se calcula el dinero ...
fuente