【问题标题】:How to prevent minus sign when using DecimalFormat?使用 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 文件是否在数字字段的开头使用零宽度连接符或空格有效。再次感谢。

标签: java sign number-formatting


【解决方案1】:

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

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

【讨论】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2020-05-19
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多