Вероятно, вам следует масштабировать десятичные значения на 100 и представлять все денежные значения в центах. Это сделано для того, чтобы избежать проблем с логикой с плавающей запятой и арифметикой . В JavaScript нет десятичного типа данных - единственный числовой тип данных - это числа с плавающей запятой. Поэтому обычно рекомендуется обращаться с деньгами как с 2550
центами, а не с 25.50
долларами.
Учтите, что в JavaScript:
var result = 1.0 + 2.0; // (result === 3.0) returns true
Но:
var result = 0.1 + 0.2; // (result === 0.3) returns false
Выражение 0.1 + 0.2 === 0.3
возвращается false
, но, к счастью, целочисленная арифметика с плавающей запятой точна, поэтому ошибок десятичного представления можно избежать, масштабируя 1 .
Обратите внимание, что хотя набор действительных чисел бесконечен, только конечное их число (18 437 736 874 454 810 627, если быть точным) может быть точно представлено в формате JavaScript с плавающей запятой. Следовательно, представление других чисел будет приближением к действительному числу 2 .
1 Дуглас Крокфорд: JavaScript: Хорошие части : Приложение A - Ужасные части (стр. 105) .
2 Дэвид Флэнаган: JavaScript: Полное руководство, четвертое издание : 3.1.3 Литералы с плавающей запятой (стр. 31) .