Нет такой вещи, как "точный" финансовый расчет, потому что всего две цифры десятичной дроби, но это более общая проблема.
В JavaScript вы можете масштабировать каждое значение на 100 и использовать Math.round()
каждый раз, когда может произойти дробь.
Вы можете использовать объект для хранения чисел и включить округление в его прототипы valueOf()
метод. Как это:
sys = require('sys');
var Money = function(amount) {
this.amount = amount;
}
Money.prototype.valueOf = function() {
return Math.round(this.amount*100)/100;
}
var m = new Money(50.42355446);
var n = new Money(30.342141);
sys.puts(m.amount + n.amount); //80.76569546
sys.puts(m+n); //80.76
Таким образом, каждый раз, когда вы используете денежный объект, он будет представлен как округленный до двух десятичных знаков. Необоснованное значение все еще доступно через m.amount
.
Вы можете встроить свой собственный алгоритм округления в Money.prototype.valueOf()
, если хотите.