【问题标题】:Decimalformat in javajava中的十进制格式
【发布时间】:2013-01-12 06:36:41
【问题描述】:

我正在使用 decimalformat 将值格式化为 2 位小数

Ex : 200.0075 --> 200.00
Ex:  200.0050 --> 200.00

我使用的代码是:

DecimalFormat df = new DecimalFormat("#.##")

问题是

String value = df.format(200.0075) gives 200.01

String value = df.format(200.0050) gives 200.00

如何在 java 中使用 deciamlformat 仅获得 2 位小数。

【问题讨论】:

  • 你的问题有点不清楚。您似乎希望两个值都被截断而不是四舍五入。是这样吗?
  • 这比看起来要复杂得多。如果你从浮点值(float/double)开始,你有一个主要的问题会妨碍你。您想截断两位小数,但由于浮点是不精确的表示,您可以输入 200.17 并发现最接近的浮点实际上是 200.16999999974,截断后最终将是 200.16。如果您的所有号码从头到尾都是BigDecimal,则不存在此问题。如果任何地方都有浮动,您看到意想不到的结果。
  • 如果您能澄清您是否使用浮点数以及您是否可以容忍像我描述的浮点伪影,这将非常有帮助。如果不能,则需要更复杂的方法,即使那样,也会有一些情况会产生意想不到的结果。

标签: java format decimal


【解决方案1】:

您看到这种舍入行为是因为the default rounding mode for DecimalFormat is HALF_EVEN。请改用RoundingMode.DOWN

【讨论】:

  • 这不会做 OP 似乎需要的,即截断。
  • 不适用于200.0075,它仍然会四舍五入。只有200.0050 会向下取整。
  • 在您的示例中输出为零,而不是两位。
  • 嗯。 ideone.com/EqtJHI我得出的结论是这个问题不恰当,已经晚了。
猜你喜欢
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2013-02-27
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多