packageDemo_1.Test_2;importjava.math.BigDecimal;/*** @描述:Java Double 精度问题总结
* @详细描述:使用Java,double 进行运算时,经常出现精度丢失的问题,
* 总是在一个正确的结果左右偏0.0000**1。
* 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。
* 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,
* 经常会因为精度丢失而导致程序处理流程出错。
*@authorBrokenColor
* @date 2017年3月2日下午1:13:34*/
public classDoubleTest {/*** 对double数据进行取精度.
*@paramvalue double数据.
*@paramscale 精度位数(保留的小数位数).
*@paramroundingMode 精度取值方式.
*@return精度计算后的数据.*/
public static double round(double value, intscale,introundingMode) {
BigDecimal bd= newBigDecimal(value);
bd=bd.setScale(scale, roundingMode);double d =bd.doubleValue();
bd= null;returnd;
}/*** double 相加
*@paramd1
*@paramd2
*@return
*/
public double sum(double d1,doubled2){
BigDecimal bd1= newBigDecimal(Double.toString(d1));
BigDecimal bd2= newBigDecimal(Double.toString(d2));returnbd1.add(bd2).doubleValue();
}/*** double 相减
*@paramd1
*@paramd2
*@return
*/
public double sub(double d1,doubled2){
BigDecimal bd1= newBigDecimal(Double.toString(d1));
BigDecimal bd2= newBigDecimal(Double.toString(d2));returnbd1.subtract(bd2).doubleValue();
}/*** double 乘法
*@paramd1
*@paramd2
*@return
*/
public double mul(double d1,doubled2){
BigDecimal bd1= newBigDecimal(Double.toString(d1));
BigDecimal bd2= newBigDecimal(Double.toString(d2));returnbd1.multiply(bd2).doubleValue();
}/*** double 除法
*@paramd1
*@paramd2
*@paramscale 四舍五入 小数点位数
*@return
*/
public double div(double d1,double d2,intscale){//当然在此之前,你要判断分母是否为0,//为0你可以根据实际需求做相应的处理
BigDecimal bd1 = newBigDecimal(Double.toString(d1));
BigDecimal bd2= newBigDecimal(Double.toString(d2));returnbd1.divide
(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}