1

我不喜欢 Java 的 DecimalFormat 类的行为。

我正在尝试做的是使用德语区域设置在文本字段中输入值“0.23”(其中“。”是分组字符,而不是小数!!)。

预期结果将是:

  • 启用分组:ParseException,因为分组字符在错误的位置

  • 禁用分组:ParseException,因为“。” 字符是不允许的。

实际结果:

  • 启用分组:23.0

  • 禁用分组:0.0

有谁知道更好的实现,或者我应该将其归档为 Java Bug 吗?

4

2 回答 2

1

禁用分组时,字符 '.' 不能是数字的一部分。

来自 NumerFormat 的 parse(String source) API:

“该方法可能不会使用给定字符串的整个文本。”

因此,该方法将在读取第一个不能成为数字一部分的字符后停止解析。所以“0.23”总是0。“0,1.2.3”是0,1

于 2011-06-29T11:45:37.783 回答
0
    Locale.setDefault(Locale.GERMAN);
    DecimalFormat format = new DecimalFormat();
    Number d = format.parse("0.23");
    System.out.println(d);
    d = format.parse("1.000,23");
    System.out.println(d);

这对我有用,输出是 23 和 1000.23。

于 2011-06-29T12:30:37.887 回答