【问题标题】:How to parse "1,23$" in java using NumberFormat class and obtain 123 as number如何使用 NumberFormat 类在 java 中解析“1,23$”并获得 123 作为数字
【发布时间】:2019-11-22 04:45:59
【问题描述】:

我尝试了以下代码示例,但没有奏效,

NumberFormat.getCurrencyInstance(Locale.US).parse("1,23$")

抛出异常

java.text.ParseException: Unparseable number: "1,23$"

【问题讨论】:

  • 您可以尝试手动遍历字符串并进行解析。
  • 可以使用正则表达式去掉$,.等,然后解析
  • 我需要一个一致的 api,尤其是使用可以解析 "$1,23" 和 "1,23$" 的 NumberFormat,我不希望手动解析字符串
  • @Muhammad,是的,我知道这些基本的东西,但我只打算通过 NumberFormat 类来做到这一点
  • 如果你只对数字感兴趣,为什么需要使用numberformat?

标签: java number-formatting


【解决方案1】:
    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setCurrencySymbol("$");
    dfs.setGroupingSeparator('.');
    dfs.setDecimalSeparator(',');
    df.setDecimalFormatSymbols(dfs);       
    final Number parse = df.parse("1,23$");
    System.out.println(parse);

【讨论】:

【解决方案2】:

您不能使用一种数字格式同时检查两者。如果另一个失败,您需要尝试一个:

DecimalFormat format1 = 
    (DecimalFormat)NumberFormat.getNumberInstance(Locale.US);
format1.applyPattern("##,#0¤");

DecimalFormat format2 = 
    (DecimalFormat)NumberFormat.getNumberInstance(Locale.US);
format2.applyPattern("¤##,#0");

System.out.println(format1.parse("1,23$"));
System.out.println(format2.parse("$1,23"));

这使用货币模式占位符¤

【讨论】:

  • 这是最接近我要求的答案之一,我可以设法在运行时获取模式,感谢您的帮助,
【解决方案3】:

好像你想要这个

public int getValue(String s) {
    return Integer.parseInt(s.replaceAll("\\p{Punct}", ""));
} 

【讨论】:

  • 当然,事实上我已经尝试过了,但是有没有办法使用 NumberFormat 或任何支持解析“1,23$”和“$1”的第三方库来做到这一点, 23"
  • 我不确定我是否理解这些要求。 Integer 是 Number 子类,为什么重要的是你如何得到它?
  • 好的,如果这就是全部,那么在 jdk 中添加 NumberFormat.getCurrencyInstance 有什么意义呢?使用这个 api 有一些目的,因此我想使用这个 CurrencyInstance 来解析任何给定的金额,例如“1,23€”,“€2,34”,“$3,2”,“5.6$”使用一个通用的 api,这就是为什么我正在寻找使用 NumberFormat.getCurrencyInstance(..) 类似的东西,:)
  • 当您真正需要解析货币时使用它,而不仅仅是获取字符串中的所有数值。解决简单问题的方法不止一种
【解决方案4】:

重新格式化你的字符串。

String s = "1,23$";
s = '$' + s.replaceAll("\\p{Punct}", "");
System.out.println(NumberFormat.getCurrencyInstance(Locale.US).parse(s));

【讨论】:

  • 为什么要使用货币解析?您已删除美元和逗号,因此只需解析为 int
【解决方案5】:
Number number = NumberFormat.getCurrencyInstance(Locale.US).parse("$1,23");

        System.out.println("Number is "+ number ) ;

输出是

Number is 123

如果你传递值1,23$

Exception in thread "main" java.text.ParseException: Unparseable number: "1,23$"
    at java.text.NumberFormat.parse(NumberFormat.java:385)
    at com.example.polls.PollsApplicationTests.main(PollsApplicationTests.java:18)

【讨论】:

  • 我的输入是:“1,23$”,但是解析函数应该适用于“$1,23”和“1,23$”
  • @Manoranjan 不,你必须再次了解解析函数
  • 我的数据中存在货币符号的金额数据,例如:“1,23€”、“€2,34”、“$3,2”、“5.6$”,其中货币符号只能在结尾或开头,我需要使用 NumberFormat 使用相同的代码解析所有这些货币数据,如果不是 NumberFormat,第 3 方库对我来说可以正常工作
  • 然后删除所有货币符号并解析纯文本
  • 是的,我已经尝试删除所有货币符号并且它确实有效,但我的疑问是:但是在 JDK 中有 NumberFormat.getCurrencyInstance(..) 有什么意义
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多