为什么 DecimalFormat 忽略分组字符?

发布于 2024-11-17 16:22:42 字数 348 浏览 3 评论 0原文

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

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

预期结果为:

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

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

实际结果:

  • 启用分组:23.0

  • 禁用分组:0.0

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

I do not like the behaviour of Java's DecimalFormat class.

What I'm trying to do is input a value of "0.23" in a text field using the German locale (where '.' is the grouping character, not the decimal !!).

Expected result would be:

  • with grouping enabled: ParseException, because the grouping character is in the wrong place

  • with grouping disabled: ParseException, because the '.' character is not allowed.

Actual result:

  • with grouping enabled: 23.0

  • with grouping disabled: 0.0

Does anyone know of a better implementation, or should I file this as a Java Bug ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

澉约 2024-11-24 16:22:42

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

从 NumerFormat 的 parse(String source) API 中:

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

因此该方法将在读取第一个不能属于数字的字符后停止解析。因此“0.23”始终为 0。而“0,1.2.3”为 0,1

When groupping is disabled, the char '.' can not be part of a number.

From API of parse(String source) of NumerFormat:

"The method may not use the entire
text of the given string."

So the method will stop parsing after reading the first char which can't be part of the number. So "0.23" is always 0. and "0,1.2.3" is 0,1

说谎友 2024-11-24 16:22:42
    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。

    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);

This works for me, output is 23 and 1000.23.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文