Java Currency Number format Java Currency Number format java java

Java Currency Number format


I'd recommend using the java.text package:

double money = 100.1;NumberFormat formatter = NumberFormat.getCurrencyInstance();String moneyString = formatter.format(money);System.out.println(moneyString);

This has the added benefit of being locale specific.

But, if you must, truncate the String you get back if it's a whole dollar:

if (moneyString.endsWith(".00")) {    int centsIndex = moneyString.lastIndexOf(".00");    if (centsIndex != -1) {        moneyString = moneyString.substring(1, centsIndex);    }}


double amount =200.0;Locale locale = new Locale("en", "US");      NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale);System.out.println(currencyFormatter.format(amount));

or

double amount =200.0;System.out.println(NumberFormat.getCurrencyInstance(new Locale("en", "US"))        .format(amount));

The best way to display currency

Output

$200.00

If you don't want to use sign use this method

double amount = 200;DecimalFormat twoPlaces = new DecimalFormat("0.00");System.out.println(twoPlaces.format(amount));

200.00

This also can be use (With the thousand separator )

double amount = 2000000;    System.out.println(String.format("%,.2f", amount));          

2,000,000.00


I doubt it. The problem is that 100 is never 100 if it's a float, it's normally 99.9999999999 or 100.0000001 or something like that.

If you do want to format it that way, you have to define an epsilon, that is, a maximum distance from an integer number, and use integer formatting if the difference is smaller, and a float otherwise.

Something like this would do the trick:

public String formatDecimal(float number) {  float epsilon = 0.004f; // 4 tenths of a cent  if (Math.abs(Math.round(number) - number) < epsilon) {     return String.format("%10.0f", number); // sdb  } else {     return String.format("%10.2f", number); // dj_segfault  }}