【问题标题】:Parse Japanese currency String with java.text.NumberFormat使用 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”)

有人可以帮忙吗? 谢谢

【问题讨论】:

    标签: java unicode cjk number-formatting


    【解决方案1】:

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

    【讨论】:

    【解决方案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);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多