格式货币没有货币符号

我正在使用NumberFormat.getCurrencyInstance(myLocale)来获取我给定的区域设置的自定义货币格式。 但是,这总是包含我不想要的货币符号,我只想为没有货币符号的给定区域设置正确的货币数字格式。

做一个format.setCurrencySymbol(null)抛出一个exception..

以下的作品。 这有点难看,但它履行了合同:

 NumberFormat nf = NumberFormat.getCurrencyInstance(); DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols(); decimalFormatSymbols.setCurrencySymbol(""); ((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols); System.out.println(nf.format(12345.124).trim()); 

您也可以从货币格式获取模式,删除货币符号,并从新模式重新构build一个新的格式:

 NumberFormat nf = NumberFormat.getCurrencyInstance(); String pattern = ((DecimalFormat) nf).toPattern(); String newPattern = pattern.replace("\u00A4", "").trim(); NumberFormat newFormat = new DecimalFormat(newPattern); System.out.println(newFormat.format(12345.124)); 

设置一个空string,而不是:

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US); DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setCurrencySymbol(""); // Don't use null. formatter.setDecimalFormatSymbols(symbols); System.out.println(formatter.format(12.3456)); // 12.35 

有一个货币格式需要 “无符号”,当你有巨大的报告或意见,几乎所有的列代表货币值,符号是烦人的,没有必要的符号,但是对于千位分隔符和小数点逗号是。 你需要

 new DecimalFormat("#,##0.00"); 

并不是

 new DecimalFormat("$#,##0.00"); 
 DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(2); String formatted = df.format(num); 

用于num许多types,但不要忘记用BigDecimal表示货币 。

对于你的num在小数点后可以有两位数以上的情况,你可以使用df.setMaximumFractionDigits(2)来只显示两个数字,但是这只能隐藏运行应用程序的人的底层问题。