使用 java.text.NumberFormat 解析日本货币字符串

Posted

技术标签:

【中文标题】使用 java.text.NumberFormat 解析日本货币字符串【英文标题】:Parse Japanese currency String with java.text.NumberFormat 【发布时间】:2011-05-06 12:44:04 【问题描述】:

我在用 Java 解析日本货币字符串时遇到问题。日元符号似乎与 java 认为的不匹配。这是我的代码:

NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
Number n = f.parse(s);

这会抛出异常:

Exception in thread "main" java.text.ParseException: Unparseable number: "¥200"
at java.text.NumberFormat.parse(NumberFormat.java:333)

似乎java对日元使用了不同的符号(“\uFFE5”)

有人可以帮忙吗? 谢谢

【问题讨论】:

【参考方案1】:

尝试将字符“¥”(0xC2A5)更改为“¥”(0xEFBFA5)。 "¥"(0xC2A5) 是日语语言环境中的特殊字符。

【讨论】:

谢谢。我试过了,0xEFBFA5 ( char 65509 ) 是正确的。但是在 Java 中它不会产生 ¥ 符号。而是一个正方形。也可以在这里查看:fileformat.info/info/unicode/char/ffe5/index.htm【参考方案2】:
NumberFormat f = NumberFormat.getCurrencyInstance(Locale.UK);
        String s = "£200";
        Number n = f.parse(s);

    NumberFormat f = NumberFormat.getCurrencyInstance(Locale.US);
    String s = "$200";
    Number n = f.parse(s);

会有同样的效果。 NumberFormat 适用于数字,而不适用于字符串字符,即,如果您允许 NumberFormat 仅解析整数(默认值),则需要删除货币符号。你可以这样做:

NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
f.setParseIntegerOnly(false);
Number n = f.parse(s);

这将允许日元字符通过。用 $ 尝试它,它失败了。但是将本地更改为美国,允许使用美元,而不允许使用日元。

【讨论】:

嗨palentjones,我认为你有一个错误。如果您正确设置了语言环境,$ 和 £ 显然可以与我的代码一起使用(因此您的示例可以正常工作......)。请注意,我正在获取 NumberFormat 的货币实例。 嗯。我同意我不知道这里发生了什么。我认为它似乎正在为日本开发日元,例如这有效: NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPANESE); f.setCurrency(Currency.getInstance("JPY"));字符串 s = "JPY 200";数字 n = f.parse(s);

以上是关于使用 java.text.NumberFormat 解析日本货币字符串的主要内容,如果未能解决你的问题,请参考以下文章

Java 常用类库之util包和text包

Java 常用类库之util包和text包

Java保留两位小数的几种做法

科学转换法

单词统计

将字符串转换为双精度后的问题