创建没有小数分隔符的小数

Creating a decimal number with no decimal separator

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

所以我尽量避免使用字符串运算符,而是使用具有模式 0,00 和德语语言环境的 DecimalFormat。

但是当我得到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)
}

尝试:

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

为什么要使用自己的模式? 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