bigdecimal除法保留小数double发⽣精度丢失的解决办法
发⽣精度丢失的原因:
个⼈理解:机器在运⾏时,使⽤2进制形式的计数⽅式,⽽我们⽇常⽣活中的计算是10进制的,对于整数的加减乘除,double还能适⽤,但是对于有⼩数的,则容易发⽣精度丢失,即⽤2进制表⽰10进制⼩数时,部分⼩数只是近似的表⽰,2进制表⽰不完全准确,此时,只能⽤BigDecimal来进⾏精确的精度计算。
double d1=5.0;
double d2=4.9;
BigDeciaml b1=new BigDeciaml(d1);
BigDecimal b2=new BigDecimal(d2);
加法运算:
double sum=b1.add(b2).doubleValue();
减法运算:
double sub=b1.subtract(b2).doubleValue();
乘法运算:
double mul=b1.multiply(b2).doubleValue();
除法运算:
//scale表⽰指定保留⼏位⼩数,若发⽣除不尽的情况,则按四舍五⼊来保留⼩数
double div=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
只保留⼩数位数的两种⽅法:
1)double num1=b1.divide(1,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
2)BigDecimal bg=new BigDecimal(d1);
double num2=bg.setScale(scale,BigDecimal.ROUND_HALF_UP).douleValue();
3)DecimalFormat bg=new DecimalFormat("###0.00");
double num3=bg.format(d1);
4)String num4=String.format("%.2f",d1);//与C语⾔的打印输出类似
String num5=String.format("%.2f,%.3f,%.3f",d1,d1,d3);
注意:() 将此BigDecimal转换为double
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论