使用 DecimalFormat 时如何防止减号?

Posted

技术标签:

【中文标题】使用 DecimalFormat 时如何防止减号?【英文标题】:How to prevent minus sign when using DecimalFormat? 【发布时间】:2014-06-03 17:32:59 【问题描述】:

我正在使用一个库,它可以让我配置使用 DecimalFormat 模式格式化数字的方式。我需要删除减号以显示数字的绝对值。我已经尝试过 "0.00###;0.00###" 和 "0.00###;#" 都没有成功。我可以选择任何减号(例如“0.00###;(0.00###)”)但我不能没有任何符号?

提前感谢您的建议,

汤姆

【问题讨论】:

在将Math.abs(double) 传递给DecimalFormat 之前,您难道不能简单地执行DecimalFormat 吗? 可能没有格式规范可以为您提供数字的绝对值,原因与没有格式规范可以提供平方根或对数的原因相同。为什么不传入 Math.abs(n)? 你需要解析还是格式化?如果是后者,而您所拥有的只是一个模式,则可以放置一些虚拟字符,例如 \u2060(零宽度连接符)。 它仅用于格式化,所以这是一个好主意。格式化的结果以 XML 标记值结束。我必须测试 XML 文件是否在数字字段的开头使用零宽度连接符或空格有效。再次感谢。 【参考方案1】:

为什么在格式化号码之前不能拨打Math.abs()?

int myNum = -123;
myNum = Math.abs(myNum);
System.out.println(myNum); // 123

【讨论】:

我可以访问源代码,但由于它的许可证,我不能自己更改它。我只能访问可以设置数字格式模式的配置文件。如果没有办法使用模式,我会请求它作为新功能,但这需要一段时间。【参考方案2】:

如果使用“0.00###; 0.00###”(注意分号后面的空格),则不会显示负号。

【讨论】:

【参考方案3】:

如果您真的不能像其他答案中提到的那样使用Math.abs 的绝对值,您可以更改DecimalFormat 的DecimalFormatSymbols 中的减号。请注意,您需要将值设置回您的 DecimalFormat,因为它在调用 getDecimalFormatSymbols 时会返回不同的实例。

您也可以使用 DecimalFormat.setNegativePrefix(""),正如 kdgregory 评论的那样。

【讨论】:

+1 表示正确的想法,尽管有一个更简单的解决方案:DecimalFormat.setNegativePrefix() 我会向图书馆开发者推荐这个解决方案。当数字格式模式的负子模式在其开头没有除 0 或 # 之外的任何符号时,他们可以这样做。我希望这是 DecimalFormat 的默认行为。【参考方案4】:

这可能不是你想要的,但为什么不使用 Math.abs() 并简单地做:

new DecimalFormat("0.00###").format(Math.abs(value))

【讨论】:

以上是关于使用 DecimalFormat 时如何防止减号?的主要内容,如果未能解决你的问题,请参考以下文章

DecimalFormat(数字格式)

我想在使用 DecimalFormat 时保留尾随零

java中 DecimalFormat格式的定义

java中 DecimalFormat格式的定义

除非需要使用 DecimalFormat,否则如何不显示小数位

UITableView处于编辑模式时如何更新减号的背景? [复制]