A classe MonetaryAmountFormatSymbols
Existe também a classe MonetaryAmountDecimalFormatBuilder
, que de forma semelhante a classe DecimalFormat
com a classe Number
, tem o objetivo de realizar formatações do dinheiro a partir de configurações de símbolos, moedas, quantidade mínima e máxima de dígitos antes e depois da vírgula, etc.
public class MonetaryAmountDecimalFormatBuilderExample {
public static void main(String[] args) {
MonetaryAmountFormat defaultFormat = MonetaryAmountDecimalFormatBuilder.newInstance().build();
MonetaryAmountFormat patternFormat = MonetaryAmountDecimalFormatBuilder.of("¤ ###,###.00").build();
MonetaryAmountFormat localeFormat = MonetaryAmountDecimalFormatBuilder.of(Locale.US).build();
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(12, currency);
String format = defaultFormat.format(money);//$12.00
MonetaryAmount moneyParsed = Money.parse(format, defaultFormat);//or using defafult.parse(format);
}
}
Também é possível definir qual implementação que será utilizada na serialização do objeto. Para isso existe a classe funcional MonetaryAmountProducer
, com ela é possível definir sua própria implementação a partir do number e da moeda. O Moneta por padrão já vem com três implementações:
FastMoneyProducer
produtor deMonetaryAmount
com a implementaçãoFastMoney
.MoneyProducer
produtor deMonetaryAmount
com a implementaçãoMoney
.RoundedMoneyProducer
produtor deMonetaryAmount
com a implementaçãoRoundedMoney
, nela é possível passar umMonetaryOperator
que será utilizado na construção dessa implementação caso não seja informado um operador de arredondamento será utilizado oMonetaryOperators.rounding()
. Lembrando queMonetaryOperator
dentro da implementaçãoRoundedMoney
será utilizado como agente arredondador, ou seja, para cada operação esse operador será chamado.
public class MonetaryAmountDecimalFormatBuilderExample2 {
public static void main(String[] args) {
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(12, currency);
MonetaryAmountFormat formater = MonetaryAmountDecimalFormatBuilder.of(new Locale("pt", "BR")).
withCurrencyUnit(currency).withProducer(new MoneyProducer()).build();
String format = formater.format(money);//R$ 12,00
MonetaryAmount moneyParsed = Money.parse(format, formater);//or using defafult.parse(format);
}
}
Também é possível passar uma String
como pattern para a formatação, essa String
segue o mesmo padrão da classe DecimalFormat.
public class MonetaryAmountDecimalFormatBuilderExample3 {
public static void main(String[] args) {
MonetaryAmountFormat patternFormat = MonetaryAmountDecimalFormatBuilder.of("¤ ###,###.00").build();
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(12, currency);
String format = patternFormat.format(money);//$ 12.00
MonetaryAmount moneyParsed = Money.parse(format, patternFormat);//or using defafult.parse(format);
}
}