【问题标题】:Format number with multiple dot grouping separators具有多个点分组分隔符的格式编号
【发布时间】:2019-07-22 05:56:43
【问题描述】:

我需要验证显示的字符串是否为数字。值的格式为 123.345.678,99。 即,分组分隔符是点,小数分隔符是逗号。

我尝试了设置分隔符的 DecimalFormatter:

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance();
    DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
    symbols.setGroupingSeparator('.');
    symbols.setDecimalSeparator(',');
    formatter.setDecimalFormatSymbols(symbols);
    formatter.setGroupingUsed(true);

    System.out.println(formatter.format(incoming));

但是,在这种情况下,我得到了

java.lang.IllegalArgumentException:无法将给定的对象格式化为数字

我也试过添加

formatter.applyPattern("###,###,###.##");

但它没有帮助。

有什么想法吗?

我想我也可以使用正则表达式,但如果可能的话,我想首先使用这个DecimalFormatter

【问题讨论】:

  • 我认为你想要的方法是parse,而不是format。它们是相互对立的。
  • 这个问题与 Selenium 有什么关系?我错过了什么吗?

标签: java format decimalformat


【解决方案1】:

我会丢失货币,并使用相关符号明确创建一个新的DecimalFormat。一旦你有了它,你应该用它来解析传入的字符串,而不是格式化它:

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
dfs.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(dfs);

System.out.println(df.parse(stringToTest));

【讨论】:

  • 谢谢!这有效:) 对不起,我将删除它的“Selenium”标签。
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
相关资源
最近更新 更多