Search This Blog

Friday, 11 April 2014

How to Format and Display Number to Currency in Java


Java  put comma, just like the way write a bigger amount. This type of Locale specific issue becomes really tricky if you are doing this by hard-coding. Suppose you started your business with USD, and then start selling your product on England, if you keep storing price in database in multiple currency you will face hell lot of issue. Instead of that, just keep price in one currency in database, get the latest FX rate and covert price in real time for display. Java API has rich support for formatting currency by java.text.NumberFormat class, and good knowledge of it will save lot of your time, so do invest some time on this class. 

import java.text.NumberFormat;
import java.util.Locale;

/**
 * How to format Number to different currency in Java. Following Java program
 * will show you, how you can display double value in different currency e.g.
 * USD, GBP and JPY. This example show price in multiple currency.
 * 
* @author
 */
public class Test {

    public static void main(String args[]) {
        double price = 100.25;

        showPriceInUSD(price, getExchangeRate("USD"));
        showPriceInGBP(price, getExchangeRate("GBP"));
        showPriceInJPY(price, getExchangeRate("JPY"));

    }

    /**
     * Display price in US Dollar currency
     *
     * @param price
     * @param rate
     */
    public static void showPriceInUSD(double price, double rate) {
        double priceInUSD = price * rate;
        NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);
        System.out.printf("Price in USD : %s %n", currencyFormat.format(priceInUSD));

    }

    /**
     * Display prince in British Pound
     *
     * @param price
     * @param rate
     */
    public static void showPriceInGBP(double price, double rate) {
        double princeInGBP = price * rate;
        NumberFormat GBP = NumberFormat.getCurrencyInstance(Locale.UK);
        System.out.printf("Price in GBP : %s %n", GBP.format(princeInGBP));
    }

    /**
     * Display prince in Japanese Yen
     *
     * @param price
     * @param rate
     */
    public static void showPriceInJPY(double price, double rate) {
        double princeInJPY = price * rate;
        NumberFormat currency = NumberFormat.getCurrencyInstance(Locale.JAPAN);
        System.out.printf("Price in JPY : %s %n", currency.format(princeInJPY));
    }

    /**
     * @return FX exchange rate for USD
     * @param currency
     */
    public static double getExchangeRate(String currency) {
        switch (currency) {
            case "USD":
                return 1;
            case "JPY":
                return 102.53;
            case "GBP":
                return 0.60;
            case "EURO":
                return 0.73;
            default:
                throw new IllegalArgumentException(String.format("No rates available for currency %s %n", currency));
        }
    }

}


Output
Price in USD : $100.25 
Price in GBP : £60.15  
Price in JPY : 10,279


Th NumberFormat class is on java.text package and not on java.util package. I have instance when people searching for this class, thinking that by importing java.util.* they should get NumberFormat class as well.

No comments:

Post a Comment