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 数学运算辅助类TG【20130324整理】相关推荐
- Java基础篇--工具类操作之计算并输出21世纪的闰年,计算程序的执行时间
计算并输出21世纪的闰年,计算程序的执行时间. 实现方法不唯一,此方法仅作初学者(自己)参考..... 所用类API介绍 所用方法API介绍 GregorianCalendar类中直接给出了判断是否为 ...
- Java基础篇:类的通用格式
也许理解类的最重要的事情就是它定义了一种新的数据类型.一旦定义后,就可以用这种新类型来创建该类型的对象. 这样,类就是对象的模板(template),而对象就是类的一个instance.既然一个对象就 ...
- java基础---Math工具类
package com.henu;public class Test04 {public static void main(String[] args) {//Math类中的各种方法System.ou ...
- Java基础——Arrays工具类的使用
常用方法: 案例: 实现代码: import java.util.Arrays;public class javatest1 {public static void main(String[] arg ...
- 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)
菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...
- Java 线程 - 基础及工具类 (二)
Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...
- Java基础篇——类与子类
1. 什么是类,什么是子类? 类:类是Java程序的基本要素,一个Java应用程序就是由若干个类所构成的.类是Java语言中最重要的"数据类型". 子类:由继承得到的类叫子类. 引 ...
- Java基础篇--设计模式
目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...
- 《Java 后端面试经》Java 基础篇
<Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...
最新文章
- Day 33 并发编程3
- Windows 32位程序在64位操作系统下运行
- Cisco路由器配置命令之模式转换命令
- LINUX装魂斗罗游戏,魂斗罗战甲1-支援形态装置搭配思路及攻略
- 7-157 求一元二次方程的根 (20 分)
- mysql数据类型的学习心得_MySQL自学总结 (一到四章)
- docker搭建pgadmin并挂载
- msfvenom 生成php木马,利用msfvenom生成木马程序
- echarts文档解读
- excel转置怎么操作_收藏!Excel表格常见问题,超详细的解决方案
- 我奋斗了十八年不是为了和你喝一杯咖啡
- mt6735 [AT Command] AP下发AT+CLAC命令后 ,手机出现宕机
- 服务器拒绝mac访问共享文件,Mac怎样访问局域网共享文件
- rviz中显示Marker标记
- html制作钢铁侠心脏,钢铁侠胸部的“心脏”并非特效,那是怎么放进身体的?...
- Eclipse从零开始搭建一个SpringBoot项目
- appbase 和docbase
- 华为手机传感器测试软件,华为P8拍摄能力测试 IMX278传感器到底魅力何在
- 不小心合并了icloud通讯录_iCloud合并通讯录没了如何恢复?最简单的技巧分析
- Java Swing事件处理——键盘事件及监听处理 KeyListener 按键测试
热门文章
- 信息安全 数据赛 铁人三项_信息安全铁人三项赛-赛事章程-信息安全铁人三项赛...
- 内网穿透及端口转发(下)
- 【R语言与数据分析实战】数据操作(一):基于向量的处理与外部数据处理
- ORA-04098: 触发器无效且未通过重新验证
- 罗马时钟 基于前端CSS、JS 实现
- 区块链技术与农产品供应链结合的价值研究
- 【JS】原始值与引用值、执行上下文与作用域链、作用域链增强、变量声明、标识符查找
- 毕业设计 基于STM32的环境监控报警系统
- LED 控制卡 单元板 接口引脚定义
- 手撸一个基于Springboot的文件管理系统,可用于练手或者毕业设计