Java中防止精度丢失MathArithmetic 加减乘除

2019-03-12  本文已影响0人  在太陽下裸奔

package com.oishi.utils.common;

import java.math.BigDecimal;

public class MathArithmetic {

private static final int DEF_DIV_SCALE =10;

// 加法运算

    public static double add(double v1,double v2) {

BigDecimal b1 =new BigDecimal(Double.toString(v1));

BigDecimal b2 =new BigDecimal(Double.toString(v2));

return b1.add(b2).doubleValue();

}

// 加法运算

    public static double add(double... v1) {

BigDecimal b =new BigDecimal(0);

for (int i =0; i < v1.length; i++) {

BigDecimal b1 =new BigDecimal(Double.toString(v1[i]));

b = b.add(b1);

}

return b.doubleValue();

}

// 减法运算

    public static double sub(double v1,double v2) {

BigDecimal b1 =new BigDecimal(Double.toString(v1));

BigDecimal b2 =new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

// 减法运算

    public static double sub(double... v1) {

BigDecimal b =new BigDecimal(Double.toString(v1[0]));

for(int i=1;i

BigDecimal b1 =new BigDecimal(Double.toString(v1[i]));

b = b.subtract(b1);

}

return b.doubleValue();

}

// 乘法运算

    public static double mul(double v1,double v2) {

BigDecimal b1 =new BigDecimal(Double.toString(v1));

BigDecimal b2 =new BigDecimal(Double.toString(v2));

return b1.multiply(b2).doubleValue();

}

// 除法运算

    public static double div(double v1,double v2) {

return div(v1, v2,DEF_DIV_SCALE);

}

// 除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。

    public static double div(double v1,double v2,int scale) {

if (scale <0) {

throw new IllegalArgumentException("指定精度必须大于0");

}

BigDecimal b1 =new BigDecimal(Double.toString(v1));

BigDecimal b2 =new BigDecimal(Double.toString(v2));

return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}

// 提供精确的小数位四舍五入处理。

    public static double round(double v,int scale) {

if (scale <0) {

throw new IllegalArgumentException("指定精度必须大于0");

}

BigDecimal b =new BigDecimal(Double.toString(v));

BigDecimal one =new BigDecimal("1");

return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}

public static void main(String args[]) {

System.out.println(sub(7,3,4,3));

}

}

上一篇下一篇

猜你喜欢

热点阅读