¿Me he perdido una llamada API estándar que elimina ceros insignificantes finales de un número?
Ex.
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
Number.toFixed () y Number.toPrecision () no son exactamente lo que estoy buscando.
javascript
regex
math
numbers
Steven
fuente
fuente
1.234000 === 1.234
.parseFloat(n)
?Respuestas:
Si lo convierte en una cadena, no mostrará ceros finales, que no se almacenan en la variable en primer lugar, ya que se creó como un Número, no como una Cadena.
fuente
var n = 1.245000000000001
(suponiendo que sea insignificante ser representado por el usuario)Tuve una instancia similar en la que quería usarla
.toFixed()
cuando fuera necesario, pero no quería el relleno cuando no era así. Así que terminé usando parseFloat junto con toFixed.Fijado sin relleno
Otra opción que hace casi lo mismo.
Esta respuesta puede ayudar a su decisión.
toFixed
redondeará / rellenará el número a una longitud específica, pero también lo convertirá en una cadena. Convertirlo de nuevo a un tipo numérico no solo hará que el número sea más seguro de usar aritméticamente, sino que también eliminará automáticamente los ceros finales. Por ejemplo:Porque incluso si define un número con ceros finales, se eliminan.
fuente
parseFloat(n).toFixed(4);
lugar de tu respuesta real. Lo siento.+(n.toFixed(4))
?Primero usé una combinación de las respuestas de matti-lyra y gary:
Resultados:
El caso un tanto problemático es 0.10001. Terminé usando esta versión más larga:
Actualización : Y esta es la versión más nueva de Gary (ver comentarios):
Esto da los mismos resultados que arriba.
fuente
toFixed(4).replace(/([0-9]+(\.[1-9]+)?)(\.?0+$)/,"$1")
([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)
replace(/[,.][1-9]+(0+)/,'')
?El
toFixed
método hará el redondeo apropiado si es necesario. También agregará ceros finales, lo que no siempre es ideal.Si convierte el valor de retorno en un número, esos ceros finales se eliminarán. Este es un enfoque más simple que hacer sus propios cálculos de redondeo o truncamiento.
fuente
toFixed
llamada). Es un caso extraño UX edge.Tenía básicamente el mismo requisito, y descubrí que no hay un mecanismo incorporado para esta funcionalidad.
Además de recortar los ceros finales, también tuve la necesidad de redondear y formatear la salida para la configuración regional actual del usuario (es decir, 123,456.789).
Todo mi trabajo en esto se ha incluido como prettyFloat.js (con licencia MIT) en GitHub: https://github.com/dperish/prettyFloat.js
Ejemplos de uso:
Actualizado - agosto de 2018
Todos los navegadores modernos ahora son compatibles con la API de internacionalización ECMAScript , que proporciona una comparación de cadenas sensible al idioma, formato de número y formato de fecha y hora.
Para navegadores antiguos, puede usar este polyfill: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
fuente
¿Qué tal simplemente multiplicar por uno como este?
fuente
Puedes probar este para minimizar números flotantes
fuente
Respuesta pura regex
¡Me pregunto por qué nadie dio uno!
fuente
También necesitaba resolver este problema cuando Django mostraba valores de tipo Decimal en un campo de texto. Por ejemplo, cuando '1' era el valor. Mostraría '1.00000000'. Si '1.23' fuera el valor, mostraría '1.23000000' (en el caso de una configuración 'decimal_places' de 8)
Usar parseFloat no era una opción para mí, ya que es posible que no devuelva exactamente el mismo valor. toFixed no era una opción ya que no quería redondear nada, así que creé una función:
fuente
Ninguna de estas soluciones me funcionó para números muy pequeños. http://numeraljs.com/ resolvió esto por mí.
fuente
Si no puede usar Flotadores por algún motivo (como los flotadores de dinero involucrados) y ya está comenzando desde una cadena que representa un número correcto, puede encontrar esta solución a mano. Convierte una cadena que representa un número en una cadena que representa un número sin ceros finales.
fuente
Después de leer todas las respuestas, y comentarios, terminé con esto:
Sé usar
eval
puede ser dañino de alguna manera, pero esto me ayudó mucho.Entonces:
Si desea limitar los lugares decimales, úselos
toFixed()
como otros señalaron.Eso es.
fuente
Necesitaba eliminar los ceros finales pero mantener al menos 2 decimales, incluidos los ceros.
Los números con los que estoy trabajando son 6 cadenas de números decimales, generadas por .toFixed (6).
Resultado Esperado:
Solución:
Lógica:
Ejecute la función de bucle si el último carácter de cadena es un cero.
Elimine el último carácter y actualice la variable de cadena.
Si el último carácter de cadena actualizado no es un cero, finalice el bucle.
Si la cadena actualizada del tercer al último carácter es un punto flotante, finalice el bucle.
fuente
Aquí hay una posible solución:
fuente
parseFloat()
Será muy apropiado.