Java 十进制格式 : how to reject "invalid" input with grouped decimals?

标签 java grouping number-formatting

当使用以下 NumberFormat 时:

    NumberFormat amountFormat = NumberFormat
        .getNumberInstance(I18N.getThreadLocale());
    amountFormat.setMaximumFractionDigits(2);
    amountFormat.setMinimumFractionDigits(2);

解析via时得到以下结果

    System.out.println(amountFormat.parse(value));
  • 10,50 => 1050
  • 10,5 => 105
  • 0,25 => 25

我知道在 Locale.ENGLISH 中“,”是组分隔符。但我认为上述结果没有意义。我们的客户对这种格式感到很奇怪。

如何禁用此分组?

我希望得到以下结果:

  • 10,50 => 解析异常
  • 10,5 => 解析异常
  • 0,25 => 解析异常

有标准方法可以做到这一点吗?或者我必须编写自己的 NumberFormat 吗?

最佳答案

其中一个问题是分组字符(英语语言环境中的“,”)。要禁用对 NumberFormat 实例的分组支持,您只需调用 setGroupingUsed(false) 即可。

然而,这会导致一个不同的问题,即 NumberFormat 从字符串的开头进行解析,直到到达未知字符。如果禁用分组,parse("12foo") 将返回 12,就像 parse("10,50") 将返回 10 一样。要检查整个输入字符串是否已实际解析,您必须使用带有 ParsePosition 参数的解析方法并检查其索引以及输入字符串是否已解析到末尾或者解析器是否停止在字符串中的较早位置。

关于Java 十进制格式 : how to reject "invalid" input with grouped decimals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680120/

相关文章:

Java 变量约定

java - 如何在JTable的指定单元格中设置JComboBox

html - 什么决定输入值是用点还是逗号输出?

tags - 两个 RFID 读取器产生不同的 ID(不是字节顺序差异)

java - 不使用绘图清除 JFrame(图形 g)

java - 添加一个泛型允许您覆盖具有不同返回类型的方法?

php - 在循环中获取数组的增量

php - 按值对关联数组元素进行分组,并将原始键保留为每个组中的新值

r - 如何唯一地识别变量组中的观察值?

c++ - 如何将 C++ 数字格式设置为一定的精度?