public final class Counter {
private int cents;
public int dollars() {
return cents / 100;
}
public int cents() {
return cents; // if you want to retrun all centes
// return cents % 100; // if you want to return cents less than dollar
}
public void add(int dollars, int cents) {
this.cents = dollars * 100 + cents;
}
public void reset() {
cents = 0;
}
}
Одно очень важное правило для финансового программирования: НИКОГДА НЕ ИСПОЛЬЗУЙТЕ FLOAT КАК ДЕНЬГИ СЧЕТЧИКА . У вас определенно есть проблемы с этим скоро или даже очень скоро. Посмотрите мой пример, на самом деле ваш счетчик может быть реализован очень просто, просто держа количество центов как int (как я вижу, у вас нет части центов).
P.S. Один трюк на будущее
Представьте, что вам нужны значения с плавающей запятой и поддержите все стандартные математические операции над ними, например +,-,/,*
. Например. доллар и целое количество центов (как в вашем примере), и вы не можете (или не хотите) использовать плавающие операции. Что делать?
Просто зарезервируйте две младшие цифры в целочисленном значении в виде дробной части. Итак, давайте возьмем пример для цены $ 12:
int price = 1200; // 00 is reserverd for centes, , price is $12
price += 600; // add $6, price is $18
price += 44; // add $0.44, price is $18.55
int dollars = price / 100; // retrieve total dollars - $18
int cents = cents % 100; // retrieve cents less than dollars - 44