创建没有小数分隔符的十进制数

时间:2016-01-08 20:41:32

标签: java decimalformat

我正在尝试接收一个int,它总是一个带有2位小数的数字。 例如:

  • 1000是10,00(我的小数点分隔符是逗号)。
  • 100是1,00
  • 0是0,00
  • 100099是1.000,99

所以我试图避免使用String运算符并将DecimalFormat与模式0,00和德语区域设置一起使用。

但是当我得到10004时,我获得的输出是1.00.04

这是我的代码:

public static String formatDecimal(double number) {
    //String pattern  = "#,00";
    String pattern  = "0,00";
    DecimalFormat fN = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMAN);
    fN.applyPattern(pattern); 

    return fN.format(number)
}

2 个答案:

答案 0 :(得分:2)

尝试:

public static String formatDecimal(double number) {
    DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.GERMANY);
    dfs.setGroupingSeparator('.');
    return new DecimalFormat("0,00", dfs).format(number / 100);
}

formatDecimal(1000);   // 10,00
formatDecimal(100);    // 1,00
formatDecimal(0);      // 0,00
formatDecimal(100099); // 1.000,99

答案 1 :(得分:2)

为什么要使用自己的模式? Java默认实现在大多数语言环境中具有相当好的模式。至少通过查看Oracle's docs,它看起来应该做你需要做的事情:

Locale                  Formatted Numbers
German (Germany)        123.456,789
German (Switzerland)    123'456.789
English (United States) 123,456.789

所以你需要做的事情(除了将数字除以100之外)将最小分数设置为“2”:

public static String formatDecimal(double number) {
    NumberFormat german = NumberFormat.getNumberInstance(Locale.GERMAN);
    german.setMinimumFractionDigits(2);
    return german.format(number / 100);
}

已编辑:按预期打印数字:

0,00
0,01
0,02
0,09
0,10
0,11
0,99
1,00
1,01
9,99
10,00
10,01
99,99
100,00
100,01
999,99
1.000,00
1.000,01
9.999,99
10.000,00
10.000,01
99.999,99
100.000,00
100.000,01
999.999,99
1.000.000,00
1.000.000,01