博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java精确计算、精确计算工具类
阅读量:5293 次
发布时间:2019-06-14

本文共 6917 字,大约阅读时间需要 23 分钟。

java精确计算

package org.aisino.erp.webservice.dzfp.util;import java.math.BigDecimal;public class MathExtend {    //默认除法运算精度           private static final int DEFAULT_DIV_SCALE = 2;      /**         * 提供精确的加法运算。         * @param v1         * @param v2         * @return 两个参数的和        */         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();          }         /**          * 提供精确的加法运算          * @param v1            * @param v2          * @return 两个参数数学加和,以字符串格式返回          */          public static String add(String v1, String v2)          {              BigDecimal b1 = new BigDecimal(v1);              BigDecimal b2 = new BigDecimal(v2);              return b1.add(b2).toString();          }                  /**         * 提供精确的减法运算。         * @param v1         * @param v2         * @return 两个参数的差         */          public static double subtract(double v1, double v2)          {              BigDecimal b1 = new BigDecimal(Double.toString(v1));              BigDecimal b2 = new BigDecimal(Double.toString(v2));              return b1.subtract(b2).doubleValue();          }                  /**          * 提供精确的减法运算          * @param v1          * @param v2          * @return 两个参数数学差,以字符串格式返回          */          public static String subtract(String v1, String v2)          {              BigDecimal b1 = new BigDecimal(v1);              BigDecimal b2 = new BigDecimal(v2);              return b1.subtract(b2).toString();          }                           /**         * 提供精确的乘法运算。         * @param v1         * @param v2         * @return 两个参数的积         */         public static double multiply(double v1, double v2)          {             BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));              return b1.multiply(b2).doubleValue();         }                   /**          * 提供精确的乘法运算          * @param v1          * @param v2          * @return 两个参数的数学积,以字符串格式返回          */          public static String multiply(String v1, String v2)          {              BigDecimal b1 = new BigDecimal(v1);              BigDecimal b2 = new BigDecimal(v2);             return b1.multiply(b2).toString();          }                   /**         * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到        * 小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN        * @param v1        * @param v2        * @return 两个参数的商         */          public static double divide(double v1, double v2)          {              return divide(v1, v2, DEFAULT_DIV_SCALE);          }                  /**          * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指          * 定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN        * @param v1         * @param v2         * @param scale 表示需要精确到小数点以后几位。         * @return 两个参数的商         */         public static double divide(double v1,double v2, int scale)         {             return divide(v1, v2, scale, BigDecimal.ROUND_HALF_EVEN);         }                 /**         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指         * 定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式         * @param v1         * @param v2        * @param scale 表示需要精确到小数点以后几位        * @param round_mode 表示用户指定的舍入模式        * @return 两个参数的商        */          public static double divide(double v1,double v2,int scale, int round_mode){                if(scale < 0)                {                    throw new IllegalArgumentException("The scale must be a positive integer or zero");                 }                BigDecimal b1 = new BigDecimal(Double.toString(v1));                BigDecimal b2 = new BigDecimal(Double.toString(v2));                 return b1.divide(b2, scale, round_mode).doubleValue();         }                 /**        * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到         * 小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN         * @param v1         * @param v2         * @return 两个参数的商,以字符串格式返回         */         public static String divide(String v1, String v2)         {            return divide(v1, v2, DEFAULT_DIV_SCALE);         }                /**         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指         * 定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN         * @param v1         * @param v2         * @param scale 表示需要精确到小数点以后几位         * @return 两个参数的商,以字符串格式返回         */         public static String divide(String v1, String v2, int scale)         {             return divide(v1, v2, DEFAULT_DIV_SCALE, BigDecimal.ROUND_HALF_EVEN);        }                 /**         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指         * 定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式         * @param v1        * @param v2         * @param scale 表示需要精确到小数点以后几位         * @param round_mode 表示用户指定的舍入模式         * @return 两个参数的商,以字符串格式返回         */    public static String divide(String v1, String v2, int scale, int round_mode)        {             if(scale < 0)            {                 throw new IllegalArgumentException("The scale must be a positive integer or zero");            }             BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.divide(b2, scale, round_mode).toString();    }                /**         * 提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN        * @param v 需要四舍五入的数字         * @param scale 小数点后保留几位         * @return 四舍五入后的结果        */         public static double round(double v,int scale)         {             return round(v, scale, BigDecimal.ROUND_HALF_EVEN);         }        /**         * 提供精确的小数位四舍五入处理         * @param v 需要四舍五入的数字         * @param scale 小数点后保留几位         * @param round_mode 指定的舍入模式        * @return 四舍五入后的结果         */         public static double round(double v, int scale, int round_mode)        {            if(scale<0)            {               throw new IllegalArgumentException("The scale must be a positive integer or zero");            }            BigDecimal b = new BigDecimal(Double.toString(v));            return b.setScale(scale, round_mode).doubleValue();         }                 /**         * 提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN         * @param v 需要四舍五入的数字         * @param scale 小数点后保留几位         * @return 四舍五入后的结果,以字符串格式返回         */         public static String round(String v, int scale)         {           return round(v, scale, BigDecimal.ROUND_HALF_EVEN);         }     /**        * 提供精确的小数位四舍五入处理        * @param v 需要四舍五入的数字         * @param scale 小数点后保留几位        * @param round_mode 指定的舍入模式         * @return 四舍五入后的结果,以字符串格式返回         */        public static String round(String v, int scale, int round_mode)        {           if(scale<0)            {                throw new IllegalArgumentException("The scale must be a positive integer or zero");           }           BigDecimal b = new BigDecimal(v);            return b.setScale(scale, round_mode).toString();         }  }

 

转载于:https://www.cnblogs.com/qq376324789/p/10770066.html

你可能感兴趣的文章
大白话讲解 BitSet
查看>>
sql语句中where与having的区别
查看>>
Python数据分析入门案例
查看>>
0x7fffffff的意思
查看>>
Java的值传递和引用传递
查看>>
HTML5的服务器EventSource(server-sent event)发送事件
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
Ubuntu sudo 出现 is not in the sudoers file解决方案
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
js中函数与对象的使用
查看>>
正则表达式
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>