package com.code44.finance.utils; import android.text.TextUtils; import com.code44.finance.common.model.GroupSeparator; import com.code44.finance.data.model.Currency; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; public final class CurrencyFormat { private final DecimalFormat decimalFormat; public CurrencyFormat() { decimalFormat = (DecimalFormat) DecimalFormat.getInstance(); } public CurrencyFormat(Currency currency) { decimalFormat = (DecimalFormat) DecimalFormat.getInstance(); // Setup symbols final DecimalFormatSymbols symbols = decimalFormat.getDecimalFormatSymbols(); final char groupSeparator = currency.getGroupSeparator() != GroupSeparator.None ? currency.getGroupSeparator().symbol().charAt(0) : 0; symbols.setGroupingSeparator(groupSeparator); symbols.setDecimalSeparator(currency.getDecimalSeparator().symbol().charAt(0)); // Setup format decimalFormat.setDecimalFormatSymbols(symbols); decimalFormat.setMinimumFractionDigits(currency.getDecimalCount()); decimalFormat.setMaximumFractionDigits(currency.getDecimalCount()); final String symbol = currency.getSymbol(); final boolean hasSymbol = !TextUtils.isEmpty(symbol); switch (currency.getSymbolPosition()) { case FarLeft: if (hasSymbol) { decimalFormat.setPositivePrefix(symbol + " "); decimalFormat.setNegativePrefix(symbol + " -"); } else { decimalFormat.setNegativePrefix("-"); } break; case CloseLeft: if (hasSymbol) { decimalFormat.setPositivePrefix(symbol); decimalFormat.setNegativePrefix(symbol + "-"); } else { decimalFormat.setNegativePrefix("-"); } break; case FarRight: if (hasSymbol) { decimalFormat.setPositiveSuffix(" " + symbol); decimalFormat.setNegativeSuffix(" " + symbol); } break; case CloseRight: if (hasSymbol) { decimalFormat.setPositiveSuffix(symbol); decimalFormat.setNegativeSuffix(symbol); } break; default: throw new IllegalArgumentException("Symbol position " + currency.getSymbolPosition() + " is not supported."); } } public String format(double value) { return decimalFormat.format(value); } }