zoukankan      html  css  js  c++  java
  • 科学计算法帮助类MathUtils

    import java.math.BigDecimal;
    import java.math.MathContext;
    import java.math.RoundingMode;
    
    /**
     * 科学计算数字的帮助类
     * @author yzl
     *
     */
    public class MathUtils {
        /**
         * 返回科学计算后的乘法结果
         * @param val1
         * @param val2
         * @param mc    精度
         * @param more  更多
         * @return
         */
        public static double multiply(double val1,double val2,int mc,double... more) {
            if(val1==0 || val2==0) return 0;
            BigDecimal bg1 = new BigDecimal(val1);
            BigDecimal bg2 = new BigDecimal(val2);
            BigDecimal result = new BigDecimal(0);
            
            if(more.length>0){
                for(int i=0,len=more.length; i<len; i++){
                    if(i<len-1){
                        result = result.multiply(new BigDecimal(more[i]));
                    }else{
                        result = result.multiply(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
                    }
                }
            }else{
                result = bg1.multiply(bg2, new MathContext(mc,RoundingMode.HALF_UP));
            }
            
            return result.doubleValue();
        }
        /**
         * 返回科学计算后的除法结果
         * @param fz  分子
         * @param fm  分母
         * @param mc    精度
         * @param more  更多
         * @return
         */
        public static double divide(double fz,double fm,int mc,double... more) {
            if(fz==0 || fm==0) return 0;
            BigDecimal bg1 = new BigDecimal(fz);
            BigDecimal bg2 = new BigDecimal(fm);
            BigDecimal result = new BigDecimal(0);
            
            if(more.length>0){
                for(int i=0,len=more.length; i<len; i++){
                    if(i<len-1){
                        result = result.divide(new BigDecimal(more[i]));
                    }else{
                        result = result.divide(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
                    }
                }
            }else{
                result = bg1.divide(bg2, new MathContext(mc,RoundingMode.HALF_UP));
            }
            
            return result.doubleValue();
        }
        
        /**
         * 返回科学计算后的减法结果
         * @param val1
         * @param val2
         * @param mc    精度
         * @param more  更多
         * @return
         */
        public static double subtract(double val1,double val2,int mc,double... more) {
            if(val2==0) return val1;
            BigDecimal bg1 = new BigDecimal(val1);
            BigDecimal bg2 = new BigDecimal(val2);
            BigDecimal result = new BigDecimal(0);
            
            if(more.length>0){
                for(int i=0,len=more.length; i<len; i++){
                    if(i<len-1){
                        result = result.subtract(new BigDecimal(more[i]));
                    }else{
                        result = result.subtract(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
                    }
                }
            }else{
                result = bg1.subtract(bg2, new MathContext(mc,RoundingMode.HALF_UP));
            }
            
            return result.doubleValue();
        }
        
        /**
         * 返回科学计算后的加法结果
         * @param val1  
         * @param val2
         * @param mc    精度
         * @param more  更多
         * @return
         */
        public static double add(double val1,double val2,int mc,double... more) {
            BigDecimal bg1 = new BigDecimal(val1);
            BigDecimal bg2 = new BigDecimal(val2);
            BigDecimal result = new BigDecimal(0);
            
            if(more.length>0){
                for(int i=0,len=more.length; i<len; i++){
                    if(i<len-1){
                        result = result.add(new BigDecimal(more[i]));
                    }else{
                        result = result.add(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
                    }
                }
            }else{
                result = bg1.add(bg2, new MathContext(mc,RoundingMode.HALF_UP));
            }
            
            return result.doubleValue();
        }
    }
  • 相关阅读:
    存储过程系列之存储过程sql查询存储过程的使用
    SQL Server 连接字符串和身份验证详解
    存储过程
    Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)
    Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
    Objective-C:MRC手动释放对象内存举例(引用计数器)
    C语言:内存的分配与管理
    Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
    Objective-C:在类中设置不同协议
    Objective-C:继承的体现
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/4195578.html
Copyright © 2011-2022 走看看