Java 使用十进制格式时如何防止减号?

Java 使用十进制格式时如何防止减号?,java,sign,number-formatting,Java,Sign,Number Formatting,我正在使用一个库,该库允许我配置使用DecimalFormat模式格式化数字的方式。我需要去掉负号来表示数字的绝对值。我试过“0.00”和“0.00”,但都没有成功。我可以选择任何减号(例如“0.00(0.00)”),但我不能没有符号 提前感谢您的建议 汤姆你为什么不能在格式化你的号码之前打电话呢 int myNum = -123; myNum = Math.abs(myNum); System.out.println(myNum); // 123 这可能不是您想要的,但为什么不使用Math.

我正在使用一个库,该库允许我配置使用DecimalFormat模式格式化数字的方式。我需要去掉负号来表示数字的绝对值。我试过“0.00”和“0.00”,但都没有成功。我可以选择任何减号(例如“0.00(0.00)”),但我不能没有符号

提前感谢您的建议

汤姆

你为什么不能在格式化你的号码之前打电话呢

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

这可能不是您想要的,但为什么不使用Math.abs()并简单地执行以下操作:

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

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


你也可以使用kdgregory评论的那样。

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

你能不能不简单地执行
Math.abs(双精度)
在将其传递给
十进制格式之前,可能没有格式规范为您提供数字的绝对值,原因与没有格式规范为您提供其平方根或对数的原因相同。为什么不通过Math.abs(n)?您需要解析还是格式化?如果是后者,并且您只有一个模式,那么您可以放置一些伪字符,如
\u2060
(零宽度连接符)。它仅用于格式化,因此这是一个好主意。格式化的结果以XML标记值结束。我必须测试XML文件在数字字段开头使用零宽度连接符或空格是否有效。再次感谢您的建议。+1虽然有一个更简单的解决方案:
DecimalFormat.setNegativePrefix()
我将向库开发人员推荐此解决方案。当一个数字格式模式有一个负的子模式,并且在其开头没有0或#以外的任何符号时,他们可以这样做。我希望这是DecimalFormat的默认行为。我可以访问源代码,但由于它的许可证,我自己无法更改它。我只能访问可以设置数字格式模式的配置文件。如果没有办法使用一个模式,我会要求它作为一个新功能,但这需要一段时间。