BigDecimalUtil
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class BigDecimalUtil {
// 除法运算默认精度
private static final int DIVIDE_DEFAULT_SCALE = 10;
private BigDecimalUtil() {
}
/**
* 加法(double)
*/
public static double add(double value1, double value2) {
BigDecimal v1 = BigDecimal.valueOf(value1);
BigDecimal v2 = BigDecimal.valueOf(value2);
return v1.add(v2).doubleValue();
}
/**
* 加法(String)
*/
public static double add(String value1, String value2) {
BigDecimal v1 = new BigDecimal(value1);
BigDecimal v2 = new BigDecimal(value2);
return v1.add(v2).doubleValue();
}
/**
* 减法(double)
*/
public static double subtract(double value1, double value2) {
BigDecimal v1 = BigDecimal.valueOf(value1);
BigDecimal v2 = BigDecimal.valueOf(value2);
return v1.subtract(v2).doubleValue();
}
/**
* 减法(String)
*/
public static double subtract(String value1, String value2) {
BigDecimal v1 = new BigDecimal(value1);
BigDecimal v2 = new BigDecimal(value2);
return v1.subtract(v2).doubleValue();
}
/**
* 乘法(double)
*/
public static double multiply(double value1, double value2) {
BigDecimal v1 = BigDecimal.valueOf(value1);
BigDecimal v2 = BigDecimal.valueOf(value2);
return v1.multiply(v2).doubleValue();
}
/**
* 乘法(String)
*/
public static double multiply(String value1, String value2) {
BigDecimal v1 = new BigDecimal(value1);
BigDecimal v2 = new BigDecimal(value2);
return v1.multiply(v2).doubleValue();
}
/**
* 除法(double)
*/
public static double divide(double value1, double value2) {
BigDecimal v1 = BigDecimal.valueOf(value1);
BigDecimal v2 = BigDecimal.valueOf(value2);
return v1.divide(v2, DIVIDE_DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 除法(String)
*/
public static double divide(String value1, String value2) {
BigDecimal v1 = new BigDecimal(value1);
BigDecimal v2 = new BigDecimal(value2);
return v1.divide(v2, DIVIDE_DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 比较是否相等
*/
public static boolean isEqual(BigDecimal v1, BigDecimal v2) {
if (v1 == null || v2 == null) {
return false;
}
return 0 == v1.compareTo(v2);
}
/**
* 格式化(保留 2 位小数)
*
* @param value
* @return
*/
public static String format(double value) {
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
return df.format(value);
}
public static void main(String[] args) {
testDecimalFormat();
}
private static void testDecimalFormat() {
double value = 10.777;
DecimalFormat df = new DecimalFormat();
df.setRoundingMode(RoundingMode.HALF_UP);// 四舍五入
// 保留 0 位小数
df = new DecimalFormat("0");
System.err.println(df.format(value));// 11
// 保留 1 位小数
df = new DecimalFormat("0.0");
System.err.println(df.format(value));// 10.8
// 保留 4 位小数,若小数位不足 4 位则补 0;若整数位不足 5 位,则补 0
System.err.println(new DecimalFormat("00000.0000").format(value));// 00010.7770
// 乘 100 -> 保留 4 位小数,若小数位不足 4 位则补 0 -> 拼接 %
System.err.println(new DecimalFormat("0.0000%").format(value));// 1077.7000%
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通