@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyUnit currencyUnit = Monetary.getCurrency(locale); Number numberValue = this.numberFormatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); } }
@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyStyleFormatter formatter = new CurrencyStyleFormatter(); Currency currency = determineCurrency(text, locale); CurrencyUnit currencyUnit = Monetary.getCurrency(currency.getCurrencyCode()); formatter.setCurrency(currency); formatter.setPattern(this.pattern); Number numberValue = formatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); }
@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyUnit currencyUnit = Monetary.getCurrency(locale); Number numberValue = this.numberFormatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); } }
@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyStyleFormatter formatter = new CurrencyStyleFormatter(); Currency currency = determineCurrency(text, locale); CurrencyUnit currencyUnit = Monetary.getCurrency(currency.getCurrencyCode()); formatter.setCurrency(currency); formatter.setPattern(this.pattern); Number numberValue = formatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(1, RoundingMode.DOWN)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount amount) { Objects.requireNonNull(amount, "Amount required."); CurrencyUnit currency = amount.getCurrency(); int scale = scaleOptional.orElse(currency.getDefaultFractionDigits()); BigDecimal value = amount.getNumber().numberValue(BigDecimal.class).setScale(scale, roundingMode); return amount.getFactory().setNumber(value).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory().setNumber( value.getNumber().numberValue(BigDecimal.class).setScale(2, RoundingMode.UP)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(4, RoundingMode.UP)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(0, RoundingMode.HALF_EVEN)) .create(); } });
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(2, RoundingMode.DOWN)) .create(); } };
/** * Test divide(Double.NEGATIVE_INFINITY) function must return ZERO amount. */ @SpecAssertion(section = "4.2.2", id = "422-D16") @Test(description = "4.2.2 For each amount class, ensure divide(Double.NEGATIVE_INFINITY) return ZERO amount.") public void testDivideDoubleNEGATIVE_INFINITY() { for (Class type : Monetary.getAmountTypes()) { if (type.equals(TestAmount.class)) { continue; } MonetaryAmount mAmount1 = Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(10).create(); MonetaryAmount mActualResult = mAmount1.divide(Double.NEGATIVE_INFINITY); AssertJUnit.assertEquals("Section 4.2.2: ZERO amount expected on division by Double.POSITIVE_INFINITY, type was " + type.getName(), mActualResult, Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(0).create()); } }
/** * Test divide(0) function must return ZERO amount. */ @SpecAssertion(section = "4.2.2", id = "422-D16") @Test(description = "4.2.2 For each amount class, ensure divide(Double.POSITIVE_INFINITY) return ZERO amount.") public void testDivideDoublePOSITIVE_INFINITY() { for (Class type : Monetary.getAmountTypes()) { if (type.equals(TestAmount.class)) { continue; } MonetaryAmount mAmount1 = Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(10).create(); MonetaryAmount mActualResult = mAmount1.divide(Double.POSITIVE_INFINITY); AssertJUnit.assertEquals("Section 4.2.2: ZERO amount expected on division by Double.POSITIVE_INFINITY, type was " + type.getName(), mActualResult, Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(0).create()); } }
/** * Test remainder(null) must throw a NullPointerException */ @SpecAssertion(section = "4.2.2", id = "422-D21") @Test(description = "4.2.2 For each amount class, ensure remainder(Double.POSITIVE_INFINITY), throws ArithmeticException.") public void testRemainder_DoublePOSITIVE_INFINITY() { for (Class type : Monetary.getAmountTypes()) { if (type.equals(TestAmount.class)) { continue; } MonetaryAmount mAmount1 = Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(10).create(); MonetaryAmount mActualResult = mAmount1.remainder(Double.POSITIVE_INFINITY); AssertJUnit.assertEquals(Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(0).create(), mActualResult); } }
/** * Test remainder(null) must throw a NullPointerException */ @SpecAssertion(section = "4.2.2", id = "422-D21") @Test(description = "4.2.2 For each amount class, ensure remainder(Double.NEGATIVE_INFINITY), throws ArithmeticException.") public void testRemainder_DoubleNEGATIVE_INFINITY() { for (Class type : Monetary.getAmountTypes()) { if (type.equals(TestAmount.class)) { continue; } MonetaryAmount mAmount1 = Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(10).create(); MonetaryAmount mActualResult = mAmount1.remainder(Double.NEGATIVE_INFINITY); AssertJUnit.assertEquals(Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(0).create(), mActualResult); } }
/** * Checks if number type is not null. */ @SpecAssertion(section = "4.2.3", id = "423-A1") @Test(description = "4.2.3 Amount types do not return a NumberValue of null.") public void testReturningNumberValueIsNotNull() { for (Class type : Monetary.getAmountTypes()) { if (type.equals(TestAmount.class)) { continue; } MonetaryAmount mAmount1 = Monetary.getAmountFactory(type).setCurrency(DEFAULT_CURRENCY).setNumber(10).create(); NumberValue result = mAmount1.getNumber(); AssertJUnit.assertNotNull("Section 4.2.3: Amount type does not return a NumberValue (null); " + type.getName(), result); } }
@Override public MonetaryAmount decode(BsonReader reader, DecoderContext decoderContext) { reader.readStartDocument(); CurrencyUnit currency = Monetary.getCurrency(reader.readString(this.currencyKey)); BigDecimal number = new BigDecimal( BigInteger.valueOf(reader.readInt64(this.unscaledKey)), reader.readInt32(this.scaleKey)); reader.readEndDocument(); return Monetary.getDefaultAmountFactory().setNumber(number).setCurrency(currency) .create(); }
@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyUnit currencyUnit = Monetary.getCurrency(locale); Number numberValue = this.numberFormatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); } }
@Override public MonetaryAmount apply(MonetaryAmount amount) { return amount.getFactory().setCurrency(amount.getCurrency()).setNumber( amount.getNumber().numberValue(BigDecimal.class) .setScale(this.context.getInt(SCALE_KEY), this.context.get(RoundingMode.class))).create(); }
@Override public MonetaryAmount decode(BsonReader reader, DecoderContext decoderContext) { reader.readStartDocument(); CurrencyUnit currency = Monetary.getCurrency(reader.readString(this.currencyKey)); BigDecimal number = new BigDecimal(reader.readString(this.numberKey)); reader.readEndDocument(); return Monetary.getDefaultAmountFactory().setNumber(number).setCurrency(currency) .create(); }
@Override public MonetaryAmount parse(String text, Locale locale) throws ParseException { CurrencyStyleFormatter formatter = new CurrencyStyleFormatter(); Currency currency = determineCurrency(text, locale); CurrencyUnit currencyUnit = Monetary.getCurrency(currency.getCurrencyCode()); formatter.setCurrency(currency); formatter.setPattern(this.pattern); Number numberValue = formatter.parse(text, locale); return Monetary.getDefaultAmountFactory().setNumber(numberValue).setCurrency(currencyUnit).create(); }