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计算工具类"就是这样的一个类,它包含了用于基本数学运算的方法,如类型转换以及加、减、乘、除等操作。下面我们将详细讨论这个类可能包含的知识点。 1. **类型转换**: Java中的类型转换是将一种数据类型...
Java 请假天数计算工具类是企业信息化管理中常见的需求,尤其在OA(办公自动化)系统中,用于准确计算员工的假期天数。这个工具类的设计通常涉及到日期处理、工作日计算以及根据公司规则进行调整等多个方面。在这个...
《AmountUtil:高效实用的数学计算工具类》 在编程领域,处理数学计算是一项常见的任务,无论是简单的加减乘除,还是复杂的数值比较和四舍五入操作,都需要精确且高效的实现。`AmountUtil`是一个专门用于数学计算的...
这个名为"工具类-经度纬度位置处理以及距离计算工具类,自用留存"的资源,显然提供了一个Java实现,用于处理经纬度坐标并计算两个位置之间的距离。下面我们将深入探讨这些知识点。 首先,我们需要理解经纬度坐标...
介绍: 在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-...皮尔逊相关性系数计算工具类,将该类复制到项目目录后,可根据业务需求,传递参数调用就行。
在Java编程领域,开发一个房贷计算工具类是解决实际生活问题的一个典型应用。这个工具类主要针对商业贷款、公积金贷款以及组合贷款这三种常见的房贷类型,提供了精准的计算功能。以下将详细介绍这两个核心文件——`...
标题提到的"iOS字符串无误差计算工具类NSDecimalNumber链式封装支持四舍五入"正是为了解决这一问题而设计的。NSDecimalNumber是苹果提供的一个类,它提供了对十进制数值进行精确计算的方法,避免了浮点数的精度损失...
四、其他数值计算工具 1. 插值:MATLAB提供了一系列插值函数,如`interp1`、`interp2`、`interp3`等,用于一维至三维数据的插值。 2. 积分:`quad`函数用于一维定积分,`quadgk`用于高精度积分,`dblquad`和`...
java代码-java数学计算工具类源代码合集 ——学习参考资料:仅用于个人学习使用!
java数学计算工具类 double精确的加法算法 double精确的减法算法 精确的乘法算法 对精确的除法运算,当发生除不尽的 保留小数、数值精度
各种时间计算模型,各种时间转换格式,获取各种格式的时间,一一尽有
超长数字计算工具,支持小数,包括加法、减法、乘法。
自己写的一个计算字符串表达式工具类; Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()
在给定的压缩包文件中,我们可以看到一个名为"util"的工具类,这是用来计算XIRR的核心组件。这个工具类很可能包含了计算XIRR所需的关键算法和方法。下面,我们将深入探讨XIRR的计算原理和如何利用编程实现。 1. **...
这是一个比较全面的处理日期时间的工具类,利用该工具类可以得到你想要的日期时间。里面代码简洁,方法已经封装好,只需要调用即可。自己可以将其打成jar包来用
用java原生的摘要实现SHA256加密
4. **数学计算工具类**:如MathUtils,包含了一些数学运算的优化实现,如最大值、最小值、幂运算等。 5. **文件操作工具类**:如FileUtils,提供读写文件、创建目录、复制文件等常用功能,简化了文件操作。 6. **...
4. **数学计算工具类**:如Apache Commons Math提供了各种数学计算,包括统计、矩阵、随机数生成等。 5. **IO工具类**:Java的java.io包基础功能,以及Apache Commons IO提供了更多高级操作,如文件复制、读写、流...
60多款机械类设计计算工具软件大全(包括锥齿轮计算 皮带机设计力学解器齿轮参数计算等 ): cass坐标转换工具软件 五金手册软件 公差查询器 公法线长度计算 冲床运动分析软件 减速器设计及齿轮参数计算系统V4.0 凸轮...
《凯瑟琳的计算工具:无线网络优化的关键助手》 在无线通信领域,网络优化是一项至关重要的任务,它直接影响到信号覆盖、服务质量以及用户满意度。其中,天线的配置和性能是网络优化的重要组成部分。"凯瑟琳的计算...