


Класс для хранения денег Java
Знаю, что есть класс BigDecimal в котором можно хранить деньги без потери точности. Но хочу конкретно разобраться при каких действиях float и double теряют точность ( отклоняются от изначального значения или не соответствуют ожидаемому результату). Плюс к вопросу хочу уточнить - есть ли вероятность потери точности, при присвоении переменной double значения. Вот набросал класс для хранения денег gist.github.com/cherniavskyeo/5d1a46931a2ed8bcb8043d3e5616b763 подскажите пожалуйста где может быть потеря точности, меня больше всего смущает метод getAmount(). Главная задача получить обратно ту сумму которую сохранил.
ДополненКласс предназначен ля хранения рублей и копеек т. е. ожидается ввод в формате 1.35 (1 рубль 35 копеек)
Соглашусь с 1 ответом. Держи в целых.
И пример такого класса:
int rub, cop;
public void plus(int rub, int cop)
{
this.rub+=rub;
if((this.cop+cop)>99){ this.rub++; this.cop=(this.cop+cop)-100; }
else this.cop+=cop;
}
Double getDoubleValue()
{
return new Double(rub, cop);
}
Храни деньги в целых числах и не будешь иметь проблем.
Double вполне достаточен для любых практических операций с деньгами, если они не зимбабвийские.
Потеря точности происходит, когда число нельзя представить в виде конечной суммы степеней двойки.
Класс посмотрел - не катит этот класс. С какого перепуга он все сразу округляет? Очень часто нужно хранить некие промежуточные расчеты с максимальной точностью, затем произвести какие-то действия с ними, и только потом округлить. Так что забей, Double - наше все.
чем дальше от запятой вправо - тем выше вероятность потери точности.
используя double и только 2 знака после запятой - шансы потерь нулевые
Ну и да, при хранении дробного числа в long - дробная часть при приведении будет отбрасываться