13

我只是在尝试使用java.util.Currency,但对于少数货币代码,它会让我失望java.lang.IllegalArgumentException

这是我的简单代码

java.util.Currency c = java.util.Currency.getInstance(code);

根据java文档

公共静态货币getInstance(字符串货币代码)

Returns the Currency instance for the given currency code.

Parameters:
    currencyCode - the ISO 4217 code of the currency 
Returns:
    the Currency instance for the given currency code 
Throws:
    NullPointerException - if currencyCode is null 
    IllegalArgumentException - if currencyCode is not a supported ISO 4217 code.

对于少数代码,我得到了这个例外,其中很少有

  1. 优易
  2. COU
  3. TMT

根据ISO_4217,以上所有代码都是官方 ISO 4217 货币名称,我不知道为什么在这种情况下我会得到这个异常?我需要做其他事情还是需要将一些其他信息传递给 JVM 以获得正确的值?消除我的困惑的任何帮助都是非常明显的,或者可以将我指向 java doc 指向的ISO 4217 货币,因为我可以在 ISO 4217 列表中看到上述代码,因此我可能正在查看错误的文档/参考。

为了提供更多见解,这里是堆栈跟踪

Exception in thread "main" java.lang.IllegalArgumentException
    at java.util.Currency.getInstance(Unknown Source)
    at java.util.Currency.getInstance(Unknown Source)
    at CurrencyTest1.main(CurrencyTest1.java:10)

和Java版本

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)
4

3 回答 3

6

这是一个有趣的问题。

COU 和 UYI 都不是真正的货币。COU 是委内瑞拉的旧货币(不再使用),UYI 是一种指数货币,可能被银行用来整理汇率。

在 java 1.7.0_u7 中,currecy TMT工作正常。TMT 于 2009 年推出,因此 Java 6 不知道该代码是有道理的。

于 2012-10-06T17:17:35.147 回答
1

因为乌拉圭UYU工作得很好而不是哥伦比亚UYI,而COP不是COU哥伦比亚TMT也不适合我。

于 2012-10-06T17:09:25.223 回答
0

编辑:对我来说这有效:

 Currency curr = java.util.Currency.getInstance("UYU");
 System.out.println("Currency code:" + curr.getCurrencyCode());

UYI不在 ISO 4217 标准中,这里有一个列表:http ://www.xe.com/iso4217.php

于 2012-10-06T17:09:19.267 回答