double类型精度计算

来源:互联网 发布:企业统一认证 知乎 编辑:程序博客网 时间:2024/06/05 04:25

double类型精度计算

package com.demo.utils;import java.math.BigDecimal;/** * double类型精度计算 * +-/*精度计算(不合适大数据量) * 可变参数太多,数以万计时应采取多线程并行计算优化 * @author dongyangyang * @Date 2016/12/28 23:12 * @Version 1.0  * */public class DoubleNumUtils {        /**            * 对double数据进行精度加法计算 例如a+b+c+....+n         * @param a  double数据(可变参数 数组)                * @return 精度计算后的数据.            */        public static double add(double ... a) {                if(a == null || a.length==0){                return 0;            }else if(a.length==1){                return a[0];            }else{                BigDecimal result = new BigDecimal(Double.toString(a[0]));                for (int i = 1; i < a.length; i++) {                    result = result.add(new BigDecimal(Double.toString(a[i])));                }                return result.doubleValue();            }        }        /**            * 对double数据进行精度减法计算,例如a-b-c-....-n         * @param a  double数据(可变参数 数组)                * @return 精度计算后的数据.            */           public static double subtract(double ... a) {            if(a == null || a.length==0){                return 0;            }else if(a.length==1){                return a[0];            }else{                BigDecimal result = new BigDecimal(Double.toString(a[0]));                for (int i = 1; i < a.length; i++) {                    result = result.subtract(new BigDecimal(Double.toString(a[i])));                }                return result.doubleValue();            }        }        /**         * 对double数据进行精度乘法计算,例如a*b*c*....*n         * @param a         * @return         */        public static double multiply(double ... a) {            if(a == null || a.length==0){                return 0;            }else if(a.length==1){                return a[0];            }else{                BigDecimal result = new BigDecimal(Double.toString(a[0]));                for (int i = 1; i < a.length; i++) {                    result = result.multiply(new BigDecimal(Double.toString(a[i])));                }                return result.doubleValue();            }        }        /**         * 对double数据进行精度除法计算,例如a/b/c/..../n         * @param a         * @return         */        public static double divide(double ... a) {            if(a == null || a.length==0){                return 0;            }else if(a.length==1){                return a[0];            }else{                BigDecimal result = new BigDecimal(Double.toString(a[0]));                for (int i = 1; i < a.length; i++) {                    result = result.divide(new BigDecimal(Double.toString(a[i])));                }                return result.doubleValue();            }        }        public static void main(String[] args) {            double a = 0.31,b=0.27;            System.out.println(a+b);            double add = add(0.31,0.27);            //比较add和a+b的区别            double subtract = subtract(1,0.3,0.1,0.1);            double multiply = multiply(10,1,3,2);            double divide = divide(100,2,5);            System.out.println(add);            System.out.println(subtract);            System.out.println(multiply);            System.out.println(divide);        }}
0 0