在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP 其他的舍入参考下图:
    
                  不同舍入模式下的舍入操作汇总
    
    
        
            | 输入数字 |     UP | 
            DOWN | 
            CEILING | 
            FLOOR | 
            HALF_UP | 
            HALF_DOWN | 
            HALF_EVEN | 
            UNNECESSARY | 
        
        
            | 5.5 | 
            6 | 
            5 | 
            6 | 
            5 | 
            6 | 
            5 | 
            6 | 
            抛出 ArithmeticException | 
        
        
            | 2.5 | 
            3 | 
            2 | 
            3 | 
            2 | 
            3 | 
            2 | 
            2 | 
            抛出 ArithmeticException | 
        
        
            | 1.6 | 
            2 | 
            1 | 
            2 | 
            1 | 
            2 | 
            2 | 
            2 | 
            抛出 ArithmeticException | 
        
        
            | 1.1 | 
            2 | 
            1 | 
            2 | 
            1 | 
            1 | 
            1 | 
            1 | 
            抛出 ArithmeticException | 
        
        
            | 1.0 | 
            1 | 
            1 | 
            1 | 
            1 | 
            1 | 
            1 | 
            1 | 
            1 | 
        
        
            | -1.0 | 
            -1 | 
            -1 | 
            -1 | 
            -1 | 
            -1 | 
            -1 | 
            -1 | 
            -1 | 
        
        
            | -1.1 | 
            -2 | 
            -1 | 
            -1 | 
            -2 | 
            -1 | 
            -1 | 
            -1 | 
            抛出 ArithmeticException | 
        
        
            | -1.6 | 
            -2 | 
            -1 | 
            -1 | 
            -2 | 
            -2 | 
            -2 | 
            -2 | 
            抛出 ArithmeticException | 
        
        
            | -2.5 | 
            -3 | 
            -2 | 
            -2 | 
            -3 | 
            -3 | 
            -2 | 
            -2 | 
            抛出 ArithmeticException | 
        
        
            | -5.5 | 
            -6 | 
            -5 | 
            -5 | 
            -6 | 
            -6 | 
            -5 | 
            -6 | 
            抛出 ArithmeticException | 
        
    
比如: 1/3 四舍五入保留
4位数
new BigDecimal(1).setScale(
4).divide(new BigDecimal(3),BigDecimal.ROUND_HALF_UP) // 0.333
在加减乘除中还可以有一个参数, 比如: 
multiply(BigDecimal multiplicand,
MathContext mc)
MathContext 也可以设置精度和舍入规则。
MathContext m = new MathContext(1,RoundingMode.HALF_UP); //表示精度1位,舍入规则是四舍五入。
还有注意的的是:结果的精度。如下图
    
        
            | Operation | Preferred Scale of Result | 
        
        
            | Add | 
            max(addend.scale(), augend.scale()) | 
        
        
            | Subtract | 
            max(minuend.scale(), subtrahend.scale()) | 
        
        
            | Multiply | 
            multiplier.scale() + multiplicand.scale() | 
        
        
            | Divide | 
            dividend.scale() - divisor.scale() | 
        
    
也就是说对于除法,结果的精度是被除数减去除数的精度。