BigDecimal舍入问题

时间:2010-05-21 09:16:29

标签: java rounding bigdecimal

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

例如:

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

等... 谢谢你们......

3 个答案:

答案 0 :(得分:6)

这可以满足您的需求:它乘以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);
    }

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

Math.ceilMath.floor取决于您的需求