美文网首页
Java中防止精度丢失MathArithmetic 加减乘除

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

作者: 在太陽下裸奔 | 来源:发表于2019-03-12 18:24 被阅读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));

    }

    }

    相关文章

      网友评论

          本文标题:Java中防止精度丢失MathArithmetic 加减乘除

          本文链接:https://www.haomeiwen.com/subject/ozohpqtx.html