`

计算工具类

阅读更多
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 计算工具类
 *
 */
public class MathUtil {
	
	public static final int DEFAULT_SCALE 			= 5;
	public static final int DIV_SCALE				= 10;
	public static final int DEFAULT_ROUND_MODE 		= BigDecimal.ROUND_DOWN; 			//掐尾
	public static final int ROUND_HALF_UP 			= BigDecimal.ROUND_HALF_UP; 		//四舍五入
	public static final DecimalFormat DEFAULT_DF 	= new DecimalFormat("0.00000");
	public static final DecimalFormat SHORT_DF 		= new DecimalFormat("0.00");
	
	/**
	 * 提供精确的加法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	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 String
	 */
	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 double
	 */
	public static double sub(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 String
	 */
	public static String sub(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.subtract(b2).toString();
	}
	
	/**
	 * 提供精确的乘法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double mul(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 String
	 */
	public static String mul(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.multiply(b2).toString();
	}
	
	/**
	 * 提供精确的除法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double div(double v1, double v2) {
		
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.divide(b2, DIV_SCALE, DEFAULT_ROUND_MODE).doubleValue();
		
	}
	
	/**
	 * 提供精确的除法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static String div(String v1, String v2) {
		
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.divide(b2, DIV_SCALE, DEFAULT_ROUND_MODE).toString();
		
	}
	
	
	/**
	 * 提供精确的指数运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double pow(double v1, double v2) {
		
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		return b1.pow((int)v2).doubleValue();
	}
	
	/**
	 * 提供精确的指数运算
	 * @param v1
	 * @param v2
	 * @return String
	 */
	public static String pow(String v1, int v2) {
		
		BigDecimal b1 = new BigDecimal(v1);
		return b1.pow((int)v2).toString();
	}
	
	/**
	 * 格式化,指定scale,指定roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v, int scale, int roundMode) {
		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, roundMode).doubleValue();
	}
	
	/**
	 * 格式化,指定scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v, int scale) {
		return round(v, scale, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,默认scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v) {
		return round(v, DEFAULT_SCALE, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,指定scale,指定roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return String
	 */
	public static String round(String v, int scale, int roundMode) {
		if(scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero.");
		}
		BigDecimal b = new BigDecimal(v);
		return b.setScale(scale, roundMode).toString();
	}
	
	/**
	 * 格式化,指定scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static String round(String v, int scale) {
		return round(v, scale, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,默认scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return String
	 */
	public static String round(String v) {
		return round(v, DEFAULT_SCALE, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化显示
	 * @param v
	 * @return
	 */
	public static String format(double v) {
		return DEFAULT_DF.format(round(v));
	}
	
	/**
	 * 格式化显示
	 * @param v
	 * @param decimalFormat
	 * @return
	 */
	public static String format(double v,DecimalFormat decimalFormat) {
		return decimalFormat.format(round(v));
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean gt(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean ge(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) > -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean eq(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == 0 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean lt(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean le(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) < 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean gt(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean ge(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) > -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean eq(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == 0 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean lt(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean le(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) < 1 ? true : false;
	}
	
}

 

分享到:
评论

相关推荐

    Java计算工具类

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

    java 请假天数计算工具类

    Java 请假天数计算工具类是企业信息化管理中常见的需求,尤其在OA(办公自动化)系统中,用于准确计算员工的假期天数。这个工具类的设计通常涉及到日期处理、工作日计算以及根据公司规则进行调整等多个方面。在这个...

    AmountUtil.zip_AmountUtil_数学计算工具类

    《AmountUtil:高效实用的数学计算工具类》 在编程领域,处理数学计算是一项常见的任务,无论是简单的加减乘除,还是复杂的数值比较和四舍五入操作,都需要精确且高效的实现。`AmountUtil`是一个专门用于数学计算的...

    工具类-经度纬度位置处理 以及 距离计算工具类,自用留存

    这个名为"工具类-经度纬度位置处理以及距离计算工具类,自用留存"的资源,显然提供了一个Java实现,用于处理经纬度坐标并计算两个位置之间的距离。下面我们将深入探讨这些知识点。 首先,我们需要理解经纬度坐标...

    皮尔逊相关性系数计算工具类

    介绍: 在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-...皮尔逊相关性系数计算工具类,将该类复制到项目目录后,可根据业务需求,传递参数调用就行。

    java房贷计算工具类(商贷、公积金、组合贷)

    在Java编程领域,开发一个房贷计算工具类是解决实际生活问题的一个典型应用。这个工具类主要针对商业贷款、公积金贷款以及组合贷款这三种常见的房贷类型,提供了精准的计算功能。以下将详细介绍这两个核心文件——`...

    iOS字符串无误差计算工具类NSDecimalNumber链式封装支持四舍五入

    标题提到的"iOS字符串无误差计算工具类NSDecimalNumber链式封装支持四舍五入"正是为了解决这一问题而设计的。NSDecimalNumber是苹果提供的一个类,它提供了对十进制数值进行精确计算的方法,避免了浮点数的精度损失...

    matlab常用数值计算工具类代码

    四、其他数值计算工具 1. 插值:MATLAB提供了一系列插值函数,如`interp1`、`interp2`、`interp3`等,用于一维至三维数据的插值。 2. 积分:`quad`函数用于一维定积分,`quadgk`用于高精度积分,`dblquad`和`...

    java代码-java数学计算工具类源代码合集

    java代码-java数学计算工具类源代码合集 ——学习参考资料:仅用于个人学习使用!

    java数学计算工具类 double精确的加法算法 double精确的减法算法

    java数学计算工具类 double精确的加法算法 double精确的减法算法 精确的乘法算法 对精确的除法运算,当发生除不尽的 保留小数、数值精度

    强大的时间计算工具类

    各种时间计算模型,各种时间转换格式,获取各种格式的时间,一一尽有

    超长数字计算工具类

    超长数字计算工具,支持小数,包括加法、减法、乘法。

    Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()

    自己写的一个计算字符串表达式工具类; Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()

    通过封装的工具类,来计算XIRR内部收益率

    在给定的压缩包文件中,我们可以看到一个名为"util"的工具类,这是用来计算XIRR的核心组件。这个工具类很可能包含了计算XIRR所需的关键算法和方法。下面,我们将深入探讨XIRR的计算原理和如何利用编程实现。 1. **...

    日期时间处理工具类

    这是一个比较全面的处理日期时间的工具类,利用该工具类可以得到你想要的日期时间。里面代码简洁,方法已经封装好,只需要调用即可。自己可以将其打成jar包来用

    JAVA SHA256Util工具类

    用java原生的摘要实现SHA256加密

    28个java常用的工具类源码

    4. **数学计算工具类**:如MathUtils,包含了一些数学运算的优化实现,如最大值、最小值、幂运算等。 5. **文件操作工具类**:如FileUtils,提供读写文件、创建目录、复制文件等常用功能,简化了文件操作。 6. **...

    50个左右的JAVA工具类,相对比较全

    4. **数学计算工具类**:如Apache Commons Math提供了各种数学计算,包括统计、矩阵、随机数生成等。 5. **IO工具类**:Java的java.io包基础功能,以及Apache Commons IO提供了更多高级操作,如文件复制、读写、流...

    60多款机械类设计计算工具软件大全(包括锥齿轮计算 皮带机设计力学解器齿轮参数计算等 ).zip

    60多款机械类设计计算工具软件大全(包括锥齿轮计算 皮带机设计力学解器齿轮参数计算等 ): cass坐标转换工具软件 五金手册软件 公差查询器 公法线长度计算 冲床运动分析软件 减速器设计及齿轮参数计算系统V4.0 凸轮...

    凯瑟琳的计算工具.

    《凯瑟琳的计算工具:无线网络优化的关键助手》 在无线通信领域,网络优化是一项至关重要的任务,它直接影响到信号覆盖、服务质量以及用户满意度。其中,天线的配置和性能是网络优化的重要组成部分。"凯瑟琳的计算...

Global site tag (gtag.js) - Google Analytics