格式化货币没有货币符号

and*_*elt 57 java currency number-formatting

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

做一个format.setCurrencySymbol(null)抛出一个异常..

JB *_*zet 55

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

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

您还可以从货币格式获取模式,删除货币符号,并从新模式重建新格式:

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));
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 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
Run Code Online (Sandbox Code Playgroud)

  • 我认为重点是罗宾所写的:不需要`getCurrencyInstance`,只需使用`getNumberInstance` (2认同)

Que*_* G. 6

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

numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");
Run Code Online (Sandbox Code Playgroud)

这确保我们拥有数字的货币格式,而没有货币或任何其他符号。


Gnz*_*zlt 5

只需使用NumberFormat.getInstance()代替NumberFormat.getCurrencyInstance()如下所示:

val numberFormat = NumberFormat.getInstance().apply {
    this.currency = Currency.getInstance()
}

val formattedText = numberFormat.format(3.4)
Run Code Online (Sandbox Code Playgroud)

  • 这会返回一个值#.#,而 getCurrencyInstance() 返回#.## (3认同)