round remove number float decimals decimales and javascript decimal

remove - JavaScript: valores decimales



parsefloat javascript 2 decimales (4)

¿Qué puedo usar como tipo decimal en JavaScript? No es compatible ( 0.1 + 0.2 !== 0.3 ), y lo necesito para representar valores exactos en una aplicación bancaria / financiera. Vea El estado y el futuro de JavaScript para una buena lectura y los detalles sucios detrás de JavaScript y su (falta de) soporte para la aritmética decimal.

Por "decimal" me refiero a:

  1. Rango infinito y precisión arbitraria (como BigDecimal en Java), o
  2. rango y precisión limitados, pero adecuado para cálculos financieros (como decimal en C #).

Entonces, ¿qué biblioteca o solución existe para trabajar con valores decimales? ¡Gracias!


A menudo se recomienda 1 para manejar el dinero como un número entero que representa el número de centavos: 2572 centavos en lugar de 25.72 dólares. Esto es para evitar los problemas con la aritmética de punto flotante que usted menciona. Afortunadamente, la aritmética de enteros en el punto flotante es exacta, por lo que los errores de representación decimal se pueden evitar mediante el escalado.

1 Douglas Crockford: JavaScript: Las partes buenas: Apéndice A - Partes horribles (página 105) .



Javascript tiene soporte de punto flotante. Pero de todos modos, para los registros financieros, la implementación más simple sería simplemente almacenar sus valores en enteros estándar. Puede declarar un número entero para representar la cantidad en centavos, o dos números enteros uno por dólares y uno por centavos.

Entonces $ 18.57 se convertirían en 1857 centavos en la primera técnica o 18 dólares y 57 centavos en la segunda.

Esto tiene la ventaja adicional de ser completamente preciso, ya que los enteros se almacenan simplemente como representación binaria única, no habría tal cosa como errores de redondeo.