格式化带前导符号的数字

Posted

技术标签:

【中文标题】格式化带前导符号的数字【英文标题】:Format a number with leading sign 【发布时间】:2011-03-09 08:54:39 【问题描述】:

如何在 Java 中格式化带有前导符号的数字?

前导-可以正确显示负数,但+显然不会显示正数。

如何在 Java 中做到这一点?我当前的货币格式字符串是\#\#\#,\#\#\#,\#\#\#,\#\#\#,\#\#0.00(是的,我需要格式化正/负货币值)

【问题讨论】:

【参考方案1】:

使用否定子模式,如 javadoc for DecimalFormat 中所述。

DecimalFormat fmt = new DecimalFormat("+#,##0.00;-#");
System.out.println(fmt.format(98787654.897));
System.out.println(fmt.format(-98787654.897));

产生(在我的法语语言环境中,空格是分组分隔符,逗号是小数分隔符):

+98 787 654,90
-98 787 654,90

【讨论】:

另外,对于 Kotlin 用户,我们可以做这样的事情 val pattern ="%+.2f"; val num =1.232432432f ; println(pattern.format(a)); 输出 +1.23【参考方案2】:

Formatter 的 API 提供了一个示例:

Formatter formatter = new Formatter();
System.out.println(formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E));
//e =    +2,7183

【讨论】:

【参考方案3】:

我做到了:

private NumberFormat plusMinusNF = new DecimalFormat("+#;-#");

Integer newBalance = (Integer) binds.get("newBalance");
bindsForUpdate.put("plusMinus", plusMinusNF.format(newBalance));

格式化正整数,例如5 到 "+5" 和负整数,例如 -7 到 "-7"(如预期)

【讨论】:

【参考方案4】:

它需要稍微调整一下 十进制格式返回 NumberFormat.getCurrencyInstance() 到 以独立于语言环境的方式进行。 这是我所做的(在 android 上测试):

DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-");
// or "-"+symbol if that's what you need
formatter.setNegativeSuffix("");

IIRC,Currency.getSymbol() 可能不会 为所有语言环境返回一个值 系统,但它应该适用于 主要的(我认为它有一个 自行合理的后备,所以你 不应该做任何事情)

ageektrapped

来源:Format negative amount of USD with a minus sign, not brackets (Java)

【讨论】:

以上是关于格式化带前导符号的数字的主要内容,如果未能解决你的问题,请参考以下文章

日期格式:

C#数字格式:前导加号和空格

填充数字格式的时间表达式,具有带前导零的可变分隔符

dateFormat时间格式

iOS 手记

格式字符串中的多个前导“#”符号有啥作用吗?