4

我想在 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有关。

有什么建议么?

4

3 回答 3

8

这并不能真正回答为什么我不能在 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。

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

于 2010-11-01T21:22:58.900 回答
3

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

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

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

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

所以看起来我们被困住了 Kludging BigDecimal scale Settings 来格式化所有需要它的应用程序的输出,而不是仅仅依靠格式化程序调用来完成工作。不是世界末日,而是让谷歌非常失望。

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

于 2011-06-09T20:04:38.403 回答
-1

我想这将是最好的选择 http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#ceil(double )

于 2010-11-01T19:56:54.633 回答