getter e public class money implements Comparable i private BigInteger amount private Currency currency public double amounto t return amount. doublevalue0 100 public Currency currency t return currency
getter public class Money implements Comparable { private BigInteger amount; private Currency currency; public double amount() { return amount.doubleValue() / 100; } public Currency currency() { return currency; }
constructor public Money (double amount, Currency currency)t this amount=BigInteger valueOf(Math. round (amount *100)) this currency currency ./public Money(long amount, Currency currency)( this amount= BigInteger valueof(amount*100) this currency currency public static Money dollars(double amount)( return new Money(amount, Currency getInstance (USD"))
constructor public Money(double amount, Currency currency) { this.amount = BigInteger.valueOf(Math.round(amount * 100)); this.currency = currency; } public Money(long amount, Currency currency) { this.amount = BigInteger.valueOf(amount * 100); this.currency = currency; } public static Money dollars(double amount) { return new Money(amount, Currency.getInstance("USD")); }
public Money add(Money arg)i assert Same CurrencyAs(arg) return new Money(amount. add(argamount), currency, true) public Money subtract(Money arg return this. add(arg negate) void assert same CurrencyAs Money argi /Assert equals(money math mismatch", currency, arg currency)
+- public Money add(Money arg) { assertSameCurrencyAs(arg); return new Money(amount.add(arg.amount), currency, true); } public Money subtract(Money arg) { return this.add(arg.negate()); } void assertSameCurrencyAs(Money arg) { //Assert.equals("money math mismatch", currency, arg.currency); }
e private Money (BigInteger amountInPennies Currency currency, boolean privacy Marker)i Assert notNull(amountInPennies) Assert notNull(currency) this amount amountIn Pennies this currency currency e public Money negate t return new Money(amount negate(, currency, true
private Money(BigInteger amountInPennies, Currency currency, boolean privacyMarker) { // Assert.notNull(amountInPennies); // Assert.notNull(currency); this.amount = amountInPennies; this.currency = currency; } public Money negate() { return new Money(amount.negate(), currency, true); }
public Money multiply (double arg)i return new Money (amounto* arg, currency); public Money[] divide(int denominator)( BigInteger bigDenominator= BigInteger. value Of(denominator);∥分母 Moneyl result = new Moneyldenominator] BigInteger simple Result amount divide(bigDenominator) for(int i=0; i< denominator; 1++t result[= new Money ( simpleResult, currency, true) int remainder amount subtract(simpleResult multiply (bigDenominator)) int Value for(int i=0; i< remainder; i++)t result[= result[]. add(new Money (BigInteger. value Of currency, true)) return result
*/ public Money multiply(double arg) { return new Money(amount() * arg, currency); } public Money[] divide(int denominator) { BigInteger bigDenominator = BigInteger.valueOf(denominator); //分母 Money[] result = new Money[denominator]; BigInteger simpleResult = amount.divide(bigDenominator); for (int i = 0; i < denominator; i++) { result[i] = new Money(simpleResult, currency, true); } int remainder = amount.subtract(simpleResult.multiply(bigDenominator)) .intValue(); for (int i = 0; i < remainder; i++) { result[i] = result[i].add(new Money(BigInteger.valueOf(1), currency, true)); } return result; }