为啥 DecimalFormat 忽略分组字符?

Posted

技术标签:

【中文标题】为啥 DecimalFormat 忽略分组字符?【英文标题】:Why does DecimalFormat ignore grouping characters?为什么 DecimalFormat 忽略分组字符? 【发布时间】:2011-06-29 08:33:10 【问题描述】:

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

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

预期结果是:

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

禁用分组:ParseException,因为 '.'不允许使用字符。

实际结果:

启用分组:23.0

禁用分组:0.0

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

【问题讨论】:

【参考方案1】:

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

来自 NumerFormat 的 parse(String source) API:

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

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

【讨论】:

【参考方案2】:
    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。

【讨论】:

以上是关于为啥 DecimalFormat 忽略分组字符?的主要内容,如果未能解决你的问题,请参考以下文章

DecimalFormat 分组符号的不同表示

DecimalFormat详解

Java DecimalFormat:如何拒绝带有分组小数的“无效”输入?

为啥 DecimalFormat ".#" 和 "0.#" 在 23.0 上有不同的结果?

hibernate oracle 中查询Date类型,忽略了时分秒 为啥?如何解决?

DecimalFormat用法