我知道使用locale和NumberFormat类获取java中货币的货币对象和其他详细信息的方法。 但我无法在API中找到任何信息来了解货币符号是在开头还是结尾显示
E.g。在美国10美元是10美元,其中$在数字的开头) 兹罗提(波兰货币)中的10是10 z(z表示兹罗提符号,但实际符号不同)。
是否有任何数字格式或货币类的属性可以帮助我找出货币符号是放在开头还是结尾?
答案 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])