格式化带前导符号的数字
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)
【讨论】:
以上是关于格式化带前导符号的数字的主要内容,如果未能解决你的问题,请参考以下文章