3

我希望能够将任何数字四舍五入到整数的四分之一。

例如:

100.33 -> 100.50
100.12 -> 100.25
100.66 -> 100.75
100.99 -> 101.00
100.70 -> 100.75
100.00 -> 100.00
100.25 -> 100.25

ETC...

谢谢各位...

4

3 回答 3

9

这可以满足您的需要:它乘以 4,向上取整,然后再除以 4。

    String[] tests = {
        "100.33", "100.12", "100.66", "100.99", "100.70", "100.00", "100.25",
    };
    final BigDecimal FOUR = BigDecimal.valueOf(4);
    for (String test : tests) {
        BigDecimal d = new BigDecimal(test);
        d = d.multiply(FOUR).setScale(0, RoundingMode.UP)
             .divide(FOUR, 2, RoundingMode.UNNECESSARY);
        System.out.println(d);
    }
于 2010-05-21T09:34:20.700 回答
1

如果没有一些人工干预,我不相信这是可能的。您可以通过将MathContext传递给 BigDecimal 构造函数来指定舍入设置;但是,该类的对象中使用的舍入模式必须是RoundingMode枚举常量(并且没有一个实现您想要的舍入类型)。如果这是一个您可以编写自己的定义的接口,那就太好了,但是您已经拥有了。

根据您的代码需要的性能,您当然可以将数字乘以 4,四舍五入到最接近的整数,然后再除以 4。这可能是最少的实际编程工作并且相对容易理解,因此如果您的代码不在性能关键部分,这就是我的建议。

于 2010-05-21T09:20:55.143 回答
0

Math.round(x.doubleValue() * 4) / 4

Math.ceilMath.floor取决于你想要什么

于 2010-05-21T09:20:42.583 回答