Java Converting long into currency

mcd picture mcd · Sep 24, 2012 · Viewed 28.3k times · Source

I am having trouble converting a long (cents) into currency format.

My Code:

long doublePayment = 1099;  //Should equal $10.99
DecimalFormat dFormat = new DecimalFormat();
String formattedString = dFormat.format(doublePayment);
System.out.println(formattedString);

Output: 1,099

I also tried:

long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
String s = n.format(doublePayment);
System.out.println(s);

Since this is cents, the output should be 10.99 or $10.99.

Cant figure out what I am doing wrong. Thanks!!!

Answer

Lauri picture Lauri · Sep 24, 2012

In case You have long to start with, you still should use java.math.BigDecimal.

    long doublePayment = 1099;
    BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
    System.out.println("$" + payment); // produces: $10.99

Let it be once again said out loud: One should never use floating-point variables to store money/currency value.