`

JAVA基础篇【工具类】MathUtil 数学运算辅助类TG【20130324整理】

阅读更多
数学运算辅助类,希望对大家有所帮助
import java.math.BigDecimal;  
  
/** 
 * 数学运算辅助类。 
 *  
 * @author Elfy
 * @date 2013年03月21日 
 */  
public class MathUtil {  
  
    /** 
     * 功能:将字符串转换为BigDecimal,一般用于数字运算时。 
     *  
     * @author Elfy
     * @date 2013年03月21日  
     * @param str 
     *            字符串 
     * @return BigDecimal,str为empty时返回null。 
     */  
    public static BigDecimal toBigDecimal(String str) {  
        if (StringUtil.isEmpty(str)) {  
            return null;  
        }  
        return new BigDecimal(str);  
    }  
  
    /** 
     * 功能:将字符串抓换为double,如果失败返回默认值。 
     *  
     * @author Elfy
     * @date 2013年03月21日 
     * @param str 
     *            字符串 
     * @param defaultValue 
     *            失败时返回的默认值 
     * @return double 
     */  
    public static double toDouble(String str, double defaultValue) {  
        if (str == null) {  
            return defaultValue;  
        }  
        try {  
            return Double.parseDouble(str);  
        } catch (NumberFormatException nfe) {  
            return defaultValue;  
        }  
    }  
  
    /** 
     * 功能:将字符串抓换为float,如果失败返回默认值。 
     *  
     * @author Elfy
     * @date 2013年03月21日 
     * @param str 
     *            字符串 
     * @param defaultValue 
     *            失败时返回的默认值 
     * @return float 
     */  
    public static float toFloat(String str, float defaultValue) {  
        if (str == null) {  
            return defaultValue;  
        }  
        try {  
            return Float.parseFloat(str);  
        } catch (NumberFormatException nfe) {  
            return defaultValue;  
        }  
    }  
  
    /** 
     * 功能:将字符串抓换为long,如果失败返回默认值。 
     *  
     * @author Elfy
     * @date 2013年03月21日 
     * @param str 
     *            字符串 
     * @param defaultValue 
     *            失败时返回的默认值 
     * @return long 
     */  
    public static long toLong(String str, long defaultValue) {  
        if (str == null) {  
            return defaultValue;  
        }  
        try {  
            return Long.parseLong(str);  
        } catch (NumberFormatException nfe) {  
            return defaultValue;  
        }  
    }  
  
    /** 
     * 功能:将字符串抓换为int,如果失败返回默认值。 
     *  
     * @author Elfy
     * @date 2013年03月21日 
     * @param str 
     *            字符串 
     * @param defaultValue 
     *            失败时返回的默认值 
     * @return int 
     */  
    public static int toInt(String str, int defaultValue) {  
        if (str == null) {  
            return defaultValue;  
        }  
        try {  
            return Integer.parseInt(str);  
        } catch (NumberFormatException nfe) {  
            return defaultValue;  
        }  
    }  
  
    /** 
     * <p> 
     * 得到两个 <code>double</code>值中最大的一个. 
     * </p> 
     *  
     * @param a 
     *            值 1 
     * @param b 
     *            值 2 
     * @return 最大的值 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static float getMax(float a, float b) {  
        if (Float.isNaN(a)) {  
            return b;  
        } else if (Float.isNaN(b)) {  
            return a;  
        } else {  
            return Math.max(a, b);  
        }  
    }  
  
    /** 
     * <p> 
     * 得到数组中最大的一个. 
     * </p> 
     *  
     * @param array 
     *            数组不能为null,也不能为空。 
     * @return 得到数组中最大的一个. 
     * @throws IllegalArgumentException 
     *             如果 <code>数组</code> 是 <code>null</code> 
     * @throws IllegalArgumentException 
     *             如果 <code>数组</code>是空 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static float getMax(float[] array) {  
        // Validates input  
        if (array == null) {  
            throw new IllegalArgumentException("The Array must not be null");  
        } else if (array.length == 0) {  
            throw new IllegalArgumentException("Array cannot be empty.");  
        }  
  
        // Finds and returns max  
        float max = array[0];  
        for (int j = 1; j < array.length; j++) {  
            max = getMax(array[j], max);  
        }  
  
        return max;  
    }  
  
    /** 
     * <p> 
     * 得到数组中最大的一个. 
     * </p> 
     *  
     * @param array 
     *            数组不能为null,也不能为空。 
     * @return 得到数组中最大的一个. 
     * @throws IllegalArgumentException 
     *             如果 <code>数组</code> 是 <code>null</code> 
     * @throws IllegalArgumentException 
     *             如果 <code>数组</code>是空 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static double getMax(double[] array) {  
        // Validates input  
        if (array == null) {  
            throw new IllegalArgumentException("The Array must not be null");  
        } else if (array.length == 0) {  
            throw new IllegalArgumentException("Array cannot be empty.");  
        }  
  
        // Finds and returns max  
        double max = array[0];  
        for (int j = 1; j < array.length; j++) {  
            max = getMax(array[j], max);  
        }  
  
        return max;  
    }  
  
    /** 
     * <p> 
     * 得到两个 <code>double</code>值中最大的一个. 
     * </p> 
     *  
     * @param a 
     *            值 1 
     * @param b 
     *            值 2 
     * @return 最大的值 
     * @author Elfy
     * @date 2013年03月21日 
     * */  
    public static double getMax(double a, double b) {  
        if (Double.isNaN(a)) {  
            return b;  
        } else if (Double.isNaN(b)) {  
            return a;  
        } else {  
            return Math.max(a, b);  
        }  
    }  
  
    /** 
     * <p> 
     * 得到两个float中最小的一个。 
     * </p> 
     *  
     * @param a 
     *            值 1 
     * @param b 
     *            值 2 
     * @return double值最小的 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static float getMin(float a, float b) {  
        if (Float.isNaN(a)) {  
            return b;  
        } else if (Float.isNaN(b)) {  
            return a;  
        } else {  
            return Math.min(a, b);  
        }  
    }  
  
    /** 
     * <p> 
     * 返回数组中最小的数值。 
     * </p> 
     *  
     * @param array 
     *            数组不能为null,也不能为空。 
     * @return 数组里面最小的float 
     * @throws IllegalArgumentException 
     *             如果<code>数组</code>是<code>null</code> 
     * @throws IllegalArgumentException 
     *             如果<code>数组</code>是空 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static float getMin(float[] array) {  
        // Validates input  
        if (array == null) {  
            throw new IllegalArgumentException("数组不能为null。");  
        } else if (array.length == 0) {  
            throw new IllegalArgumentException("数组不能为空。");  
        }  
  
        // Finds and returns min  
        float min = array[0];  
        for (int i = 1; i < array.length; i++) {  
            min = getMin(array[i], min);  
        }  
  
        return min;  
    }  
  
    /** 
     * <p> 
     * 返回数组中最小的double。 
     * </p> 
     *  
     * @param array 
     *            数组不能为null,也不能为空。 
     * @return 数组里面最小的double 
     * @throws IllegalArgumentException 
     *             如果<code>数组</code>是<code>null</code> 
     * @throws IllegalArgumentException 
     *             如果<code>数组</code>是空 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static double getMin(double[] array) {  
        // Validates input  
        if (array == null) {  
            throw new IllegalArgumentException("数组不能为null。");  
        } else if (array.length == 0) {  
            throw new IllegalArgumentException("数组不能为空。");  
        }  
        // Finds and returns min  
        double min = array[0];  
        for (int i = 1; i < array.length; i++) {  
            min = getMin(array[i], min);  
        }  
        return min;  
    }  
  
    /** 
     * <p> 
     * 得到两个double中最小的一个。 
     * </p> 
     *  
     * @param a 
     *            值 1 
     * @param b 
     *            值 2 
     * @return double值最小的 
     * @author Elfy
     * @date 2013年03月21日  
     */  
    public static double getMin(double a, double b) {  
        if (Double.isNaN(a)) {  
            return b;  
        } else if (Double.isNaN(b)) {  
            return a;  
        } else {  
            return Math.min(a, b);  
        }  
    }  
  
    /** 
     * 返回两个double的商 first除以second。 
     *  
     * @param first 
     *            第一个double 
     * @param second 
     *            第二个double 
     * @return double 
     * @author Elfy
     * @date 2013年03月21日  
     */  
    public static double divideDouble(double first, double second) {  
        BigDecimal b1 = new BigDecimal(first);  
        BigDecimal b2 = new BigDecimal(second);  
        return b1.divide(b2).doubleValue();  
    }  
  
    /** 
     * 返回两个double的乘积 first*second。 
     *  
     * @param first 
     *            第一个double 
     * @param second 
     *            第二个double 
     * @return double 
     * @author Elfy
     * @date 2013年03月21日  
     */  
    public static double multiplyDouble(double first, double second) {  
        BigDecimal b1 = new BigDecimal(first);  
        BigDecimal b2 = new BigDecimal(second);  
        return b1.multiply(b2).doubleValue();  
    }  
  
    /** 
     * 返回两个double的差值 first-second。 
     *  
     * @param first 
     *            第一个double 
     * @param second 
     *            第二个double 
     * @return double 
     * @author Elfy
     * @date 2013年03月21日  
     */  
    public static double subtractDouble(double first, double second) {  
        BigDecimal b1 = new BigDecimal(first);  
        BigDecimal b2 = new BigDecimal(second);  
        return b1.subtract(b2).doubleValue();  
    }  
  
    /** 
     * 返回两个double的和值 first+second。 
     *  
     * @param first 
     *            第一个double 
     * @param second 
     *            第二个double 
     * @return double 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static double sumDouble(double first, double second) {  
        BigDecimal b1 = new BigDecimal(first);  
        BigDecimal b2 = new BigDecimal(second);  
        return b1.add(b2).doubleValue();  
    }  
  
    /** 
     * 格式化double指定位数小数。例如将11.123格式化为11.1。 
     *  
     * @param value 
     *            原double数字。 
     * @param decimals 
     *            小数位数。 
     * @return 格式化后的double,注意为硬格式化不存在四舍五入。 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static String formatDouble(double value, int decimals) {  
        String doubleStr = "" + value;  
        int index = doubleStr.indexOf(".") != -1 ? doubleStr.indexOf(".")  
                : doubleStr.indexOf(",");  
        // Decimal point can not be found...  
        if (index == -1)  
            return doubleStr;  
        // Truncate all decimals  
        if (decimals == 0) {  
            return doubleStr.substring(0, index);  
        }  
        int len = index + decimals + 1;  
        if (len >= doubleStr.length())  
            len = doubleStr.length();  
        double d = Double.parseDouble(doubleStr.substring(0, len));  
        return String.valueOf(d);  
    }  
  
    /** 
     * 生成一个指定位数的随机数,并将其转换为字符串作为函数的返回值。 
     *  
     * @param numberLength 
     *            随机数的位数。 
     * @return String 注意随机数可能以0开头。 
     * @author Elfy
     * @date 2013年03月21日 
     */  
    public static String randomNumber(int numberLength) {  
        // 记录生成的每一位随机数  
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < numberLength; i++) {  
            // 每次生成一位,随机生成一个0-10之间的随机数,不含10。  
            Double ranDouble = Math.floor(Math.random() * 10);  
            sb.append(ranDouble.intValue());  
        }  
        return sb.toString();  
    }  
  
    /** 
     * 功能:生成一个在最大数和最小数之间的随机数。会出现最小数,但不会出现最大数。 
     *  
     * @author Elfy
     * @date 2013年03月21日 
     * @param minNum 
     *            最小数 
     * @param maxNum 
     *            最大数 
     * @return int 
     */  
    public static int randomNumber(int minNum, int maxNum) {  
        if (maxNum <= minNum) {  
            throw new RuntimeException("maxNum必须大于minNum!");  
        }  
        // 计算出来差值  
        int subtract = maxNum - minNum;  
        Double ranDouble = Math.floor(Math.random() * subtract);  
        return ranDouble.intValue() + minNum;  
    }  
  
    /** 
     * 功能:生成一个在最大数和最小数之间的随机数。会出现最小数,但不会出现最大数。<br/> 
     * 但不随机notin数组中指定的数字, 如果可随机的范围较小,可能会一直随机不到,或者随机的很慢。 
     *  
     * @author Elfy
     * @date 2013年03月21日  
     * @param minNum 
     *            最小数 
     * @param maxNum 
     *            最大数 
     * @param notin 
     *            不随机数组这些数字 
     * @return int 
     */  
    public static int randomNumber(int minNum, int maxNum, Integer[] notin) {  
        if (notin.length >= (maxNum - minNum)) {  
            throw new RuntimeException("notin数组的元素已经把可以随机的都排除了,无法得到随机数!");  
        }  
        while (true) {  
            int num = randomNumber(minNum, maxNum);  
            if (!CollectionUtil.arrayContain(notin, num)) {  
                return num;  
            }  
        }  
    }  
}  
分享到:
评论

相关推荐

    Java数学工具类MathUtil详解

    Java中的MathUtil工具类是用于处理数学计算的实用类,通常包含各种数学操作,如加、减、乘、除以及更复杂的数学函数。在提供的代码片段中,我们看到一个名为`XMathUtil`的自定义数学工具类,它扩展了Java的内置数学...

    Java计算工具类

    "Java计算工具类"就是这样的一个类,它包含了用于基本数学运算的方法,如类型转换以及加、减、乘、除等操作。下面我们将详细讨论这个类可能包含的知识点。 1. **类型转换**: Java中的类型转换是将一种数据类型...

    java工具类28+26.rar

    7. **数学计算工具类**:如MathUtil,可能包含各种数学运算,如取模、平方根、随机数生成等,简化了复杂的数学操作。 8. **网络工具类**:如NetUtil,可能包含IP地址处理、端口检查、URL解析等功能,对于处理网络...

    java常用工具类

    此外,还有其他的工具类,如DateUtil处理日期时间,RegexUtil用于正则表达式操作,MathUtil提供数学计算辅助,ArrayListUtil和HashMapUtil则针对集合操作提供便利的方法。这些工具类的使用,能够使开发者更加专注于...

    java常用工具类和接口返回对象.zip

    5. **MathUtil**:数学运算工具类,可能提供了一些高级的数学计算,比如最大值、最小值、平均值、幂运算、三角函数等,或者是一些统计相关的计算。 6. **ReflectUtil**:反射工具类,用于动态地获取类的信息,创建...

    开发工具类代码 java

    3. `MathUtil`:数学计算工具类,可能包含取模、幂运算、随机数生成等方法。 4. `FileUtil`:文件操作工具类,支持读写、复制、删除等文件操作。 5. `NetworkUtil`:网络通信工具类,如HTTP请求、URL解析等。 `...

    Java中各种工具类代码,.java文件以及使用说明

    包含各种工具类文件如ChangePinYin.java、CollectionUtil.java、DateUtil.java、DBConnectionUtil.java、FileUtil.java、FtpUtil.java、HttpClientUtil.java、MathUtil.java、MD5Util.java、StringUtil.java、...

    JAVA开发中重用到的Utils,通用工具类 utils.rar

    5. **数学工具类(MathUtil)**:可能包含一些数学运算的辅助方法,如取最大值、最小值、求平均值、幂运算等。例如,`round()`方法可以进行四舍五入的计算。 6. **网络工具类(NetworkUtil)**:这类工具类可能涉及IP...

    制作工具类及说明文档

    3. **单一职责原则**:每个工具类应专注于一个特定的领域或任务,例如`MathUtil`只处理数学运算,`FileUtil`处理文件操作,这样可以避免类过于庞大且难以管理。 4. **无状态**:工具类通常不包含任何实例变量,因为...

    C#常用工具类代码集合Util(自己工作总结)

    例如,可能会有`StringUtil`来处理字符串,`DateTimeUtil`用于日期时间的格式化和比较,`MathUtil`执行复杂的数学运算,`FileUtil`协助文件的读写操作,以及`HttpClientUtil`处理HTTP请求等。 2. **MJ.Util....

    Utility基础类大全.zip_Q98_c#工具类_c#通用类_happenedm1i_untlity

    在C#编程中,"Utility基础类大全.zip_Q98_c#工具类_c#通用类_happenedm1i_untlity"这个压缩包很可能包含了一系列用于日常开发的实用工具类,这些类通常是为了提高代码复用性和简化开发过程而设计的。下面将详细介绍...

    常用工具类

    9. **数学计算工具类**:如`MathUtil`,提供一些数学运算,如最大值、最小值、随机数生成等。 10. **线程和并发工具类**:如`ThreadUtil`,包含线程的创建、控制、同步、睡眠等功能。 11. **日志工具类**:如`...

    util类

    数学运算工具类,可能包含一些常用的数学函数,如最大值、最小值计算、幂运算、取模、随机数生成等。这类工具类可以方便地进行复杂的数学计算。 7. **JsonDataTool.java**: JSON数据处理工具类,通常包含JSON...

    JAVA工具类项目(用于平时的开发)

    Java工具类项目是一种常见的软件开发资源,它包含了一系列预定义的、封装好的功能模块,方便开发者在日常工作中快速调用,提高开发效率。Hutool是这个压缩包中提到的一个知名Java工具库,它集成了大量的实用工具类,...

    MathUtil.java

    工作中经常使用的Java工具类分享,做Java开发用得上。

    java-utils:java常用工具类,欢迎大家推送

    7. **数学和逻辑工具类**:这类工具类可能包含一些数学计算、位运算或者逻辑判断,比如`MathUtil`。 8. **JSON和XML处理工具类**:对于数据交换,`JsonUtil`和`XmlUtil`可以方便地进行序列化和反序列化。 9. **...

    常用的C#工具类

    - `MathUtil`:提供一些扩展的数学函数,如求平方根、最大值最小值、幂运算等。 4. **文件操作类**: - `FileUtil`:包括读写文件、复制移动文件、检查文件是否存在等功能。 - `DirectoryUtil`:处理目录相关...

Global site tag (gtag.js) - Google Analytics