格式货币没有货币符号
我正在使用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)
来只显示两个数字,但是这只能隐藏运行应用程序的人的底层问题。