您的位置:首页 > 编程语言 > Java开发

java 中的BigDecimal 舍入模式,及构造器精度

2016-10-24 14:26 260 查看
BigDecimal中的divide(BigDecimal divisor, int scale, int roundingMode) 方法,需要用到舍入模式。

roundMode是指舍位时候的模式,传参数的时候用BigDecimal.ROUND_XXXX_XXX, 
有: 
ROUND_CEILING:   舍位时往正无穷方向移动   1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -1   -1.5-> -1   -1.8-> -1 
ROUND_DOWN:向0的方向移动1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -1   -1.5-> -1   -1.8> -1 
ROUND_FLOOR:与CEILING相反,往负无穷   1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -2   -1.5-> -2   -1.8-> -2 
ROUND_HALF_DOWN:以5为分界线,或曰五舍六入1.5-> 1   1.6-> 1   -1.5-> -1   -1.6-> -2   
ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15-> 1.2   1.16-> 1.2   1.25-> 1.2   1.26-> 1.3 
ROUND_HALF_UP:最常见的四舍五入 
UNNECESSARY:无需舍位 
ROUND_UP:与ROUND_DOWN,远离0的方向1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -2   -1.5-> -2   -1.8-> -2

然后构造器需注意的进度问题

public class BigDecimalMain {  

    public static void main(String args[]){  

        System.out.println(new BigDecimal(123456789.01).toString());  

        System.out.println(new BigDecimal("123456789.01").toString());  

    }  

}  

结果

123456789.01000000536441802978515625   

123456789.01   

很令我吃惊啊,我今天还一直纠结 2.11 怎么new BigDecimal(2.11)*100后 intValue()变成了2.10 ..看来连使用哪个构造器也不能疏忽大意啊.

建议使用bigDecimal.valueOf();尽量避免这些坑!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: