代码之家  ›  专栏  ›  技术社区  ›  Fazal

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

  •  2
  • Fazal  · 技术社区  · 14 年前

    我知道如何使用locale和NumberFormat类在java中获取货币对象和其他货币细节。 但是我在API中找不到任何东西来知道货币符号是显示在开始还是结束

    例如,10在美国是10美元,其中$在数字的开头)

    有没有数字格式或货币类的属性可以帮助我确定货币符号是放在开始还是结束?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Tony Ennis    14 年前

    我好像没有加载太多的区域设置。。。但法国使用尾随符号,台湾使用前导符号。

    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

        2
  •  0
  •   David B    4 年前

    NumberFormat

    “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])