【发布时间】:2011-03-09 08:54:39
【问题描述】:
如何在 Java 中格式化带有前导符号的数字?
前导-可以正确显示负数,但+显然不会显示正数。
如何在 Java 中做到这一点?我当前的货币格式字符串是\#\#\#,\#\#\#,\#\#\#,\#\#\#,\#\#0.00(是的,我需要格式化正/负货币值)
【问题讨论】:
标签: java formatting numbers currency
如何在 Java 中格式化带有前导符号的数字?
前导-可以正确显示负数,但+显然不会显示正数。
如何在 Java 中做到这一点?我当前的货币格式字符串是\#\#\#,\#\#\#,\#\#\#,\#\#\#,\#\#0.00(是的,我需要格式化正/负货币值)
【问题讨论】:
标签: java formatting numbers currency
使用否定子模式,如 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
【讨论】:
val pattern ="%+.2f"; val num =1.232432432f ; println(pattern.format(a)); 输出 +1.23
Formatter 的 API 提供了一个示例:
Formatter formatter = new Formatter();
System.out.println(formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E));
//e = +2,7183
【讨论】:
我做到了:
private NumberFormat plusMinusNF = new DecimalFormat("+#;-#");
Integer newBalance = (Integer) binds.get("newBalance");
bindsForUpdate.put("plusMinus", plusMinusNF.format(newBalance));
格式化正整数,例如5 到 "+5" 和负整数,例如 -7 到 "-7"(如预期)
【讨论】:
它需要稍微调整一下 十进制格式返回 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() 可能不会 为所有语言环境返回一个值 系统,但它应该适用于 主要的(我认为它有一个 自行合理的后备,所以你 不应该做任何事情)
来源:Format negative amount of USD with a minus sign, not brackets (Java)
【讨论】: