【问题标题】:Rounding Half Up with Decimal Format in Android在 Android 中使用十进制格式四舍五入
【发布时间】:2010-11-01 19:20:44
【问题描述】:

我想在 DecimalFormat 上将舍入模式设置为 HALF_UP,但 eclipse 告诉我 setRoundingMode() 在 DecimalFormat 类上不可用。我的项目属性(以及整个 Eclipse 属性)使用的是 1.6 编译器。 developer.android.com 网站说我可以使用 Java 5 或 6,所以我不确定是什么问题。

import java.math.RoundingMode;
import java.text.DecimalFormat;

completedValueFormatter = NumberFormat.getNumberInstance(); DecimalFormat completedDecimalFormat = (DecimalFormat)completedValueFormatter; completedDecimalFormat.setRoundingMode(RoundingMode.HALF_UP);

我也尝试使用android工具生成一个基于ant的项目,在项目中尝试了这段代码,也得到了同样的编译错误。所以它似乎与 Eclipse 无关。它似乎与 Android API 有关。

有什么建议吗?

【问题讨论】:

标签: java android eclipse rounding java-6


【解决方案1】:

这并不能真正回答为什么我不能在 DecimalFormat 中使用 Java 6 .setRoundingMode(RoundingMode) 方法,但它至少是一种解决方法。

int numDigitsToShow = this.completedValueFormatter.getMaximumFractionDigits();
BigDecimal bigDecimal = new BigDecimal(valueToBeRounded);
BigDecimal roundedBigDecimal = bigDecimal.setScale(numDigitsToShow, RoundingMode.HALF_UP);

return this.completedValueFormatter.format(roundedBigDecimal.doubleValue());

我用我需要四舍五入的值创建一个 BigDecimal,然后我得到一个该值的 BigDecimal,其刻度设置为我需要将我的值四舍五入的位数。然后我将这个四舍五入的值传递给我原来的 NumberFormat 以转换为 String。

如果有人有更好的解决方案,我会全力以赴!

【讨论】:

  • 非常感谢您提供此解决方案。我在使用 java 8 时遇到了同样的错误。这是我发现的唯一可行的方法。
【解决方案2】:

这就是我怀疑的问题所在,(假设我正在正确阅读文档)而且它很糟糕:

根据 java.text.DecimalFormat API 文档,您实际上并没有获得 Java 1.6 RE 的运行时实现,而是获得了一个明显不包括 setRoundingMode 的 android“增强版”,坦率地说,这很麻烦。

“这是 DecimalFormat 的增强版本,它基于 RI 中的标准版本。新的或更改的功能标记为 NEW。”

多年来,Java 的一个弱点是 DecimalFormat 类默认为 HALF_ROUND_UP 并且无法更改,直到 JVM 1.6。遗憾的是,Android 一直在维持这种需求。

所以看起来我们被困在使用 BigDecimal 比例设置来格式化所有需要它的应用程序的输出,而不是仅仅依靠格式化程序调用来完成工作。不是世界末日,而是让 Google 非常失望。

当然,同一个文档说 setRondingMode() 有效,所以也许这是一个全面的 BUG??

【讨论】:

  • 对不起,它默认为 ROUND_HALF_EVEN.. 而不是 HALF_ROUND_UP... 作为默认设置,这更奇怪。
  • 我从来不明白为什么 Sun 选择舍入作为 DecimalFormat 的默认值。当被截断的数字为 6 或更高时,向上舍入,但如果是 5,则向最接近的 EVEN 舍入。这意味着它如果紧邻 5s 的数字是偶数,则向下舍入;如果紧邻的数字是奇数,则将向下舍入。为什么这被选为课程的默认舍入对我来说太奇怪了。
【解决方案3】:

【讨论】:

  • 我并没有尝试将所有数字增加到下一个最大整数,我使用的是复杂的格式和不同精度的舍入。
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2015-07-30
  • 2014-11-26
相关资源
最近更新 更多