代码之家  ›  专栏  ›  技术社区  ›  Kenny Wyland

在Android中使用十进制格式向上舍入一半

  •  4
  • Kenny Wyland  · 技术社区  · 14 年前

    我想在我的DecimalFormat上将舍入模式设置为HALF-UP,但是eclipse告诉我set Rounding Mode()在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的项目,在项目中尝试了这段代码,也得到了同样的编译错误。所以它似乎与日食无关。它似乎与Android API有关。

    有什么建议吗?

    3 回复  |  直到 14 年前
        1
  •  8
  •   Kenny Wyland    14 年前

    这并不能真正回答为什么我不能在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,以便转换为字符串。

        2
  •  3
  •   user756212    13 年前

    以下是我所怀疑的问题(假设我正在正确阅读文档)和它的混乱:

    “这是DecimalFormat的增强版本,它基于国际扶轮的标准版本。新的或更改的功能被标记为“新建”

    许多年来,Java的一个弱点是DecimalFormat类默认为半圆形,在JVM1.6之前无法改变。遗憾的是,看到安卓一直保持这种生存的需要。

    当然,同一个文档说setRondingMode()可以工作,所以这可能是一个彻底的BUG??