Formatting numbers using DecimalFormat

筅森魡賤 提交于 2020-01-10 18:22:44

问题


I am trying to format prices using DecimalFormat, but this isn't working for all variations.

DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)

prints

7.80

and

85

but "7.79999" gets formatted as "7.8", not "7.80". I have tried doing things this way

DecimalFormat df = new DecimalFormat("0.00")

to force two dp, but then "85.0" gets formatted as "85.00" not "85"!

Is there a way of capturing all variations, so that prices are printed either as #, ##, or #.##? For example:

5, 55, 5.55, 5.50, 500, 500.40


回答1:


This doesn't seem to be solved by a single formatter. I suggest you use "0.00" format and replace ".00" with an empty string.

public static String myFormat(double number) {
  DecimalFormat df = new DecimalFormat("0.00");
  return df.format(number).replaceAll("\\.00$", "");
}



回答2:


There is a slight difference between these two formats. The "#.##" means it will print the number with maximum two decimal places whereas "#.00" means it will always display two decimal places and if the decimal places are less than two, it will replace them with zeros. see the example below with output.

public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

And the output will be

7.8
85
85.79

7.80
85.00
85.79



回答3:


I don't think it's possible, at least not with Java SE formatters. You need to make a custom formatter. I would do it like this

String res = df.format(number).replace(".00", "");



回答4:


Use the BigDecimal number class instead:

e.g. if n is a BigDecimal, then you can use

String s = NumberFormat.getCurrencyInstance().format(n);

By the way, it's best practice to use BigDecimal when working with money.




回答5:


System.out.println(new java.text.DecimalFormat("#.##").format(5.00));

This will print 5

System.out.println(new java.text.DecimalFormat("#.00").format(500.401));

This will print 500.40



来源:https://stackoverflow.com/questions/16583604/formatting-numbers-using-decimalformat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!