BigDecimal类——解决double精度丢失

/* BigDecimal类
 * 
 * 现象:java中double类型计算时可能出现精度丢失问题。比如在对一系列double数值进行累加的时候:3.41+5.2+56.2+23.3+... (这类两位小数的价钱),结果会出现103.00000000000001这种结果
 * 原因:用2进制表示10进制小数时,部分小数只是近似的表示。
 * 解决方法:使用BigDecimal类进行货币的运算。
 * 1.定义变量:
 * double d1=3.1415926;
 * String s1="9.87654321";
 * BigDecimal bd1=new BigDecimal(d1);//BigDecimal(double)//注意最好的初始化方法是把double值转变为String,否则仍可能出现精度丢失问题。
 * BigDecimal bd2=new BigDecimal(d2);//BigDecimal(String)
 * 2.加减乘除模:
 * bd1.add(bd2);//加法add
 * bd1.add(bd2.negate());//求反negate()
 * bd1.multiply(bd2);//multiply乘法
 * bd1.divide(bd2);//divide除法
 * bd1.remainder(bd2);//remainder求模
 * 3.输出数值:
 * double d2=bd1.doubleValue();
 * int i1=bd1.intValue();
 * 4.舍入
 * a.RoundingMode枚举
 * 使用方法:RoundingMode.HALF_UP
CEILING 
          向正无限大方向舍入的舍入模式。->oo
UP 
         远离零方向舍入的舍入模式。0->
DOWN 
          向零方向舍入的舍入模式。->0
FLOOR 
          向负无限大方向舍入的舍入模式。->-oo
HALF_UP 
          四舍五入:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
HALF_DOWN 
          向最接近数字方向舍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值