2010-09-28 125 views
2

我知道如何使用区域设置和NumberFormat类获取货币的货币对象和其他货币的详细信息。 但是我无法在API中找到任何东西来了解货币符号是在开始还是结束时显示在java中特定货币的货币符号的位置

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

在数字格式或货币类别中是否有任何属性可以帮助我找到货币符号是放置在开始还是结束?

+0

不是NumberFormat为你处理吗? – mlschechter 2010-09-28 01:54:32

+0

原因whny我有这个特殊的情况下处理它发送这个符号作为前缀或后缀到一个不同的服务器,它没有Java数字格式mechnism和格式化它的方式基本上使用区域设置的所有细节作为不同的参数 – Fazal 2010-09-28 04:51:42

回答

1

我似乎没有装载很多Locales ...但法国使用尾随符号,台湾使用了一个前导符号。

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

+0

非常感谢这样一个详细的答案和链接。唯一的问题(可能是天真的)..是\\具有特殊的含义。我现在的conern案例是波兰兹罗提货币,总的来说明天可能是新的。所以我想知道这个神奇的弦是否会处理所有这些。 – Fazal 2010-09-28 05:02:37

+1

我认为这是一个格式化字符。它确实有特殊的意义 - 你想要的。这意味着,“把货币符号_here_” – 2010-09-28 11:46:33