Java精确计算工具类及数字转换百分比
Java精确计算工具类,以后会逐步改进和扩增。
package com.JohanChan.utils; import java.math.BigDecimal; public class CalculateUtils { /** * 加法 * * @param var1 * @param var2 * @return */ public static double add(double var1, double var2) { BigDecimal b1 = new BigDecimal(Double.toString(var1)); BigDecimal b2 = new BigDecimal(Double.toString(var2)); return b1.add(b2).doubleValue(); } /** * 减法 * * @param var1 * @param var2 * @return */ public static double sub(double var1, double var2) { BigDecimal b1 = new BigDecimal(Double.toString(var1)); BigDecimal b2 = new BigDecimal(Double.toString(var2)); return b1.subtract(b2).doubleValue(); } /** * 乘法 * * @param var1 * @param var2 * @return */ public static double mul(double var1, double var2) { BigDecimal b1 = new BigDecimal(Double.toString(var1)); BigDecimal b2 = new BigDecimal(Double.toString(var2)); return b1.multiply(b2).doubleValue(); } /** * 除法 * * @param v1 被除数 * @param v2 除数 * @param scale 精度,到小数点后几位 * @return */ public static double div(double v1, double v2, int scale) { if (scale < 0) { throw new IllegalArgumentException("精确度不能小于0"); } BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); }
/**
* 四舍五入
* @param v
* @param scale 精确位数
* @return
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("精确度不能小于0");
}
BigDecimal b = new BigDecimal(Double.toString(v));
return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// return b.divide(b, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/*
* 加法计算并保留小数点
* */
public static double addRound(double var1, double var2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("精确度不能小于0");
}
return round(add(var1,var2),scale);
// BigDecimal b = new BigDecimal(Double.toString(add(var1,var2)));
// return b.divide(b, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/*
* 减法计算并保留小数点
* */
public static double subRound(double var1, double var2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("精确度不能小于0");
}
return round(sub(var1,var2),scale);
}
/*
* 乘法计算并保留小数点
* */
public static double mulRound(double var1, double var2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("精确度不能小于0");
}
return round(mul(var1,var2),scale);
}
//把数字转为指定格式的百分数
public static String getPercentFormat(int maxFract, int minFract,int maxInt,int minInt,Double d){
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMaximumFractionDigits(maxFract); //最大小数位数
percentFormat.setMaximumIntegerDigits(maxInt);//最大整数位数
percentFormat.setMinimumFractionDigits(minFract); //最小小数位数
percentFormat.setMinimumIntegerDigits(minInt);//最小整数位数
return percentFormat.format(d);//自动转换成百分比显示
}
}
分类:
Java
« 上一篇: Linux下安装mysql时报错:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:Data::Dumper
» 下一篇: IE浏览器连接WebSocket报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
» 下一篇: IE浏览器连接WebSocket报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具