java中特定货币的货币符号的位置

时间:2010-09-28 01:33:57

标签: java localization internationalization

我知道使用locale和NumberFormat类获取java中货币的货币对象和其他详细信息的方法。 但我无法在API中找到任何信息来了解货币符号是在开头还是结尾显示

E.g。在美国10美元是10美元,其中$在数字的开头)      兹罗提(波兰货币)中的10是10 z(z表示兹罗提符号,但实际符号不同)。

是否有任何数字格式或货币类的属性可以帮助我找出货币符号是放在开头还是结尾?

2 个答案:

答案 0 :(得分:1)

我似乎没有加载很多Locales ...但是france使用尾随符号,taiwan使用前导符号。

public class MyCurrency {
    public static void main(String[] args) {
        System.out.println(format(Locale.FRANCE, 1234.56f));
        System.out.println(format(Locale.TAIWAN, 1234.56f));
    }

    public static String format(Locale locale, Float value) {
        NumberFormat cfLocal = NumberFormat.getCurrencyInstance(locale);
        return cfLocal.format(value);
    }
}

现在,如果您真的想知道货币符号是在开头还是结尾,请使用以下内容作为起点。请注意bPre变量...

public String format(Locale locale, Float value) {

    String sCurSymbol = "";
    boolean bPre = true;
    int ndx = 0;

    NumberFormat cfLocal = NumberFormat.getCurrencyInstance(locale);
    if (cfLocal instanceof DecimalFormat) { // determine if symbol is prefix or suffix
        DecimalFormatSymbols dfs =
                ((DecimalFormat) cfLocal).getDecimalFormatSymbols();
        sCurSymbol = dfs.getCurrencySymbol();
        String sLP = ((DecimalFormat) cfLocal).toLocalizedPattern();


        // here's how we tell where the symbol goes.
        ndx = sLP.indexOf('\u00A4');  // currency sign

        if (ndx > 0) {
            bPre = false;
        } else {
            bPre = true;
        }

        return cfLocal.format(value);

    }
    return "???";
}

信用 - 我从此页面中删除了代码。 http://www.jguru.com/faq/view.jsp?EID=137963

答案 1 :(得分:0)

这是一个Groovy代码片段,显示NumberFormat在哪里获取Locale数据,该数据决定是将货币符号设置为前缀还是后缀。

“ CLDR”命名表示基础语言环境数据取自http://cldr.unicode.org/

// Taken from sun.util.locale.provider.NumberFormatProviderImpl

// Configuration .java files are stored within the JDK's src.zip under directory:
// jdk.localedata/sun/text/resources/cldr/ext
// Look for the "NumberPatterns" key and see the position of \u00a4 (currency symbol)

import sun.util.locale.provider.CalendarDataUtility
import sun.util.locale.provider.LocaleProviderAdapter

locale = Locale.ENGLISH
type = LocaleProviderAdapter.Type.CLDR

Locale override = locale.getUnicodeLocaleType("nu") == null ?
        CalendarDataUtility.findRegionOverride(locale) :
        locale;

LocaleProviderAdapter adapter = LocaleProviderAdapter.forType(type);
String[] numberPatterns = adapter.getLocaleResources(override).getNumberPatterns();

print(numberPatterns[1])