Форматирование чисел с помощью DecimalFormat
Я пытаюсь отформатировать цены с помощью DecimalFormat, но это не работает для всех вариантов.
DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)
печать
7.80
и
85
но "7.79999" форматируется как "7.8", а не"7.80". Я пробовал делать вещи таким образом
DecimalFormat df = new DecimalFormat("0.00")
чтобы заставить два dp, но затем "85.0" форматируется как "85.00", а не "85"!
есть ли способ захватить все вариации, так что цены печатаются либо как#,##, либо #.##? Для пример:
5, 55, 5.55, 5.50, 500, 500.40
5 ответов
Это, похоже, не решается одним formatter
. Я предлагаю вам использовать и заменить ".00"
С пустой строкой.
public static String myFormat(double number) {
DecimalFormat df = new DecimalFormat("0.00");
return df.format(number).replaceAll("\.00$", "");
}
есть небольшая разница между этими двумя форматами. Этот.#" ## "означает, что он будет печатать число с максимальными двумя десятичными знаками, тогда как"#.00 " означает, что он всегда будет отображать два десятичных знака, и если десятичные знаки меньше двух, он заменит их нулями. см. пример ниже с выводом.
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));
и выход будет
7.8
85
85.79
7.80
85.00
85.79
Я не думаю, что это возможно, по крайней мере, не с Java SE formatters. Вам нужно сделать пользовательский форматтер. Я бы сделал это так
String res = df.format(number).replace(".00", "");
вместо этого используйте класс BigDecimal number:
например, если n является BigDecimal, тогда вы можете использовать
String s = NumberFormat.getCurrencyInstance().format(n);
кстати, лучше всего использовать BigDecimal при работе с деньгами.
System.out.println(new java.text.DecimalFormat("#.##").format(5.00));
это будет печатать 5
System.out.println(new java.text.DecimalFormat("#.00").format(500.401));
это будет печатать 500.40