1 package org.apidesign.apifest08.currency;
3 import java.math.BigDecimal;
4 import java.math.RoundingMode;
5 import java.util.Currency;
6 import static org.apidesign.apifest08.currency.Assert.*;
9 * An amount representation. Amount is represented as composition of a value and
12 public final class Amount {
14 private final BigDecimal value;
15 private final Currency currency;
16 private final int scale;
17 private final RoundingMode roundingMode;
19 public static final RoundingMode DEFAULT_ROUNDING = RoundingMode.HALF_EVEN;
21 public Amount(final BigDecimal value, final Currency currency) {
22 notNull(value, "value");
23 notNull(currency, "currency");
25 this.currency = currency;
26 this.scale = currency.getDefaultFractionDigits();
27 this.roundingMode = DEFAULT_ROUNDING;
30 public Amount(final BigDecimal value, final Currency currency, final RoundingMode roundingMode) {
31 notNull(value, "value");
32 notNull(currency, "currency");
33 notNull(roundingMode, "roundingMode");
36 this.currency = currency;
37 this.scale = currency.getDefaultFractionDigits();
38 this.roundingMode = roundingMode;
41 public Amount(final long value, final Currency currency) {
42 this(BigDecimal.valueOf(value), currency);
45 public Amount(final String value, final Currency currency) {
46 this(new BigDecimal(value), currency);
50 * @return the value with scale of the associated currency and rounded by
53 public BigDecimal getValue() {
54 return value.setScale(scale, roundingMode);
58 * @return the raw (no explicit scale, no explicit rounding) value
60 public BigDecimal getRawValue() {
64 public Currency getCurrency() {
68 public int getScale() {
72 public RoundingMode getRoundingMode() {
77 public String toString() {
78 return value + ",- " + currency.toString();