Search code examples
javacurrencynumber-formatting

Format currency without currency symbol


I am using NumberFormat.getCurrencyInstance(myLocale) to get a custom currency format for a locale given by me. However, this always includes the currency symbol which I don't want, I just want the proper currency number format for my given locale without the currency symbol.

Doing a format.setCurrencySymbol(null) throws an exception..


Solution

  • The following works. It's a bit ugly, but it fulfils the contract:

    NumberFormat nf = NumberFormat.getCurrencyInstance();
    DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
    decimalFormatSymbols.setCurrencySymbol("");
    ((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
    System.out.println(nf.format(12345.124).trim());
    

    You could also get the pattern from the currency format, remove the currency symbol, and reconstruct a new format from the new pattern:

    NumberFormat nf = NumberFormat.getCurrencyInstance();
    String pattern = ((DecimalFormat) nf).toPattern();
    String newPattern = pattern.replace("\u00A4", "").trim();
    NumberFormat newFormat = new DecimalFormat(newPattern);
    System.out.println(newFormat.format(12345.124));