我正在使用NumberFormat.getCurrencyInstance(myLocale)
获取我给出的语言环境的自定义货币格式。但是,这总是包含我不想要的货币符号,我只想要我没有货币符号的给定区域设置的正确货币编号格式。
做一个format.setCurrencySymbol(null)
引发异常..
以下作品。这有点难看,但它符合合同:
NumberFormat nf = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("");
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(nf.format(12345.124).trim());
您还可以从货币格式获取模式,删除货币符号,并从新模式重建新格式:
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));
用空字符串设置它:
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
也许我们可以只使用replace或substring来获取格式化字符串的数字部分。
NumberFormat fmt = NumberFormat.getCurrencyInstance(Locale.getDefault());
fmt.format(-1989.64).replace(fmt.getCurrency().getSymbol(), "");
//fmt.format(1989.64).substring(1); //this doesn't work for negative number since its format is -$1989.64
给定的解决方案有效,但最终为欧元提供了一些空格。我最终做了:
numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");
这可以确保我们为没有货币或任何其他符号的数字设置货币格式。
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);
适用于num
的许多类型,但不要忘记represent currency with BigDecimal。
对于num
在小数点后可以有两位数以上的情况,您可以使用df.setMaximumFractionDigits(2)
仅显示两个,但这只能隐藏运行应用程序的任何人的潜在问题。
两行答案
NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);
在TextView中
new Text('${formatCurrency.format(money}'),
需要货币格式“没有符号”,当你有大量的报告或视图,几乎所有列代表货币值时,符号很烦人,不需要符号,但是千元分隔符和小数逗号是。你需要
new DecimalFormat("#,##0.00");
并不是
new DecimalFormat("$#,##0.00");