views:

282

answers:

4

There is a good question on rounding decimals in Java here. But I was wondering how can I include the trailing zeros to display prices in my program like: $1.50, $1.00

The simple solution of

String.format("%.2g%n", 0.912385);

works just fine, but omits the trailing zero if it is at the last decimal place. The issue comes up in my program even though I only use expressions like this:

double price = 1.50;

When I do calculations with different prices (add, multiply, etc.) the result is primarily displayed like this:

$2.5000000000000003

So, using the String.format works fine for this purpose, but it truncates the above example to

$2.5

Is there a proper way to show the trailing zero at the second decimal place? Or both zeros if the output of a calculation should be

$2.00
+4  A: 

It can probably be done with String.format(...), but you could use DecimalFormat:

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50
Bart Kiers
+1  A: 

Have you tried:

String s = String.format("$%.2f", 2.50);

That will do the trick.

dustmachine
+7  A: 

I would recommend that you do this:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

This has the virtue of be locale-specific as well. This will work, for example, if you're in the euro zone instead of the US.

duffymo
Thanks, I was looking for something like that! I didn't know of the getCurrencyInstance() method.
denchr
+6  A: 

While others answers are perfectly valid (especially duffymo's one), you have a much bigger problem than formatting the display. You are actually using a totally wrong type for a money amount which is a discrete value. Instead of a double, you should really consider using a java.lang.BigDecimal.

(EDIT: ... or a well implemented Money class as duffymo pointed out in a comment, for example classes from JScience's monetary module or the more recent Joda-Money - which has still to be released as an official version.)

Pascal Thivent
+1 - excellent point. Either BigDecimal or a proper Money class.
duffymo
Thanks for the suggestion. Point taken :)
denchr