Reputation: 4262
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
Upvotes: 6
Views: 29751
Reputation: 1
public static String getFormattedData(String actualString)
{
String subString = "0.0";
if(actualString.contains("."))
{
subString = actualString.substring(actualString.indexOf("."), actualString.trim().length());
if(Double.parseDouble(subString) > 0.0)
return actualString;
else
actualString = actualString.substring(0, actualString.indexOf("."));
}
return actualString;
}
Upvotes: 0
Reputation: 570545
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.)
Upvotes: 14
Reputation: 308988
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.
Upvotes: 20
Reputation: 10824
Have you tried:
String s = String.format("$%.2f", 2.50);
That will do the trick.
Upvotes: 4
Reputation: 170278
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
Upvotes: 11