zoukankan      html  css  js  c++  java
  • java精确计算、精确计算工具类

    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();  
           }  
    }
  • 相关阅读:
    zw版_Halcon图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT
    《zw版·delphi与halcon系列原创教程》hello,zw
    zw版_Halcon图像库delphi接口文件
    《zw版Halcon与delphi系列原创教程》发布说明
    zw版【转发·台湾nvp系列Delphi例程】HALCON DirectShow (Delphi Prism)
    zw版【转发·台湾nvp系列Delphi例程】HALCON HImage与Bitmap格式转换
    zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式
    线程内定时器2
    Combobox中禁止鼠标中键滚动list列表
    模板模式
  • 原文地址:https://www.cnblogs.com/qq376324789/p/10770066.html
Copyright © 2011-2022 走看看