格式化货币没有货币符号

问题描述 投票:55回答:7

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

做一个format.setCurrencySymbol(null)引发异常..

java currency number-formatting
7个回答
52
投票

以下作品。这有点难看,但它符合合同:

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));

44
投票

用空字符串设置它:

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

1
投票

也许我们可以只使用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

1
投票

给定的解决方案有效,但最终为欧元提供了一些空格。我最终做了:

numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");

这可以确保我们为没有货币或任何其他符号的数字设置货币格式。


0
投票
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);

适用于num的许多类型,但不要忘记represent currency with BigDecimal

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


0
投票

两行答案

NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);

在TextView中

new Text('${formatCurrency.format(money}'),

-2
投票

需要货币格式“没有符号”,当你有大量的报告或视图,几乎所有列代表货币值时,符号很烦人,不需要符号,但是千元分隔符和小数逗号是。你需要

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

并不是

new DecimalFormat("$#,##0.00");
© www.soinside.com 2019 - 2024. All rights reserved.