使用 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 时如何防止减号?的主要内容,如果未能解决你的问题,请参考以下文章