Probablemente debería escalar sus valores decimales en 100 y representar todos los valores monetarios en centavos enteros. Esto es para evitar problemas con la lógica de punto flotante y la aritmética . No hay ningún tipo de datos decimales en JavaScript: el único tipo de datos numéricos es el punto flotante. Por lo tanto, generalmente se recomienda manejar el dinero como 2550
centavos en lugar de 25.50
dólares.
Considere eso en JavaScript:
var result = 1.0 + 2.0; // (result === 3.0) returns true
Pero:
var result = 0.1 + 0.2; // (result === 0.3) returns false
La expresión 0.1 + 0.2 === 0.3
regresa false
, pero afortunadamente la aritmética de enteros en coma flotante es exacta, por lo que los errores de representación decimal se pueden evitar al escalar 1 .
Tenga en cuenta que si bien el conjunto de números reales es infinito, solo un número finito de ellos (18,437,736,874,454,810,627 para ser exactos) puede representarse exactamente mediante el formato de coma flotante de JavaScript. Por lo tanto, la representación de los otros números será una aproximación del número real 2 .
1 Douglas Crockford: JavaScript: The Good Parts : Apéndice A - Awful Parts (página 105) .
2 David Flanagan: JavaScript: la guía definitiva, cuarta edición : 3.1.3 Literales en coma flotante (página 31) .