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%

}
posted @   凛冬雪夜  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示