LiiuZeYu_branch
lzy 9 months ago
parent f5d217ce8d
commit 177fc39e0e

@ -0,0 +1,168 @@
/*
* Copyright (c) 2018-2999 广 All rights reserved.
*
* https://www.mall4j.com/
*
*
*
*
*/
package com.yami.shop.common.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
*
* doubleBigDecimal
* @author lanhai
*/
public class Arith {
/**
* div2
* HALF_EVEN
*/
private static final int DEF_DIV_SCALE = 2;
/**
*
*
*/
private Arith() {
}
/**
*
* doubleBigDecimal
* double使double
*
* @param v1
* @param v2
* @return double
*/
public static double add(double v1, double v2) {
// 必须转换成String因为BigDecimal的构造函数建议使用基于字符串的构造方式来避免精度问题
// 如果直接使用double类型传入构造函数在某些情况下可能会出现精度丢失。
String s1 = Double.toString(v1);
String s2 = Double.toString(v2);
BigDecimal b1 = new BigDecimal(s1);
BigDecimal b2 = new BigDecimal(s2);
return b1.add(b2).doubleValue();
}
/**
*
* doubleBigDecimal
* double
*
* @param v1
* @param v2
* @return double
*/
public static double sub(double v1, double v2) {
String s1 = Double.toString(v1);
String s2 = Double.toString(v2);
BigDecimal b1 = new BigDecimal(s1);
BigDecimal b2 = new BigDecimal(s2);
return b1.subtract(b2).doubleValue();
}
/**
*
* doubleBigDecimal
* double
*
* @param v1
* @param v2
* @return double
*/
public static double mul(double v1, double v2) {
String s1 = Double.toString(v1);
String s2 = Double.toString(v2);
BigDecimal b1 = new BigDecimal(s1);
BigDecimal b2 = new BigDecimal(s2);
return b1.multiply(b2).doubleValue();
}
/**
* 10
* divDEF_DIV_SCALE
*
*
* @param v1
* @param v2
* @return double
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* scale
* scale0
* 0doubleBigDecimal
* 使HALF_EVENdouble
*
* @param v1
* @param v2
* @param scale
* @return double
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
String s1 = Double.toString(v1);
String s2 = Double.toString(v2);
BigDecimal b1 = new BigDecimal(s1);
BigDecimal b2 = new BigDecimal(s2);
return b1.divide(b2, scale, RoundingMode.HALF_EVEN).doubleValue();
}
/**
*
* scale0
* BigDecimal1BigDecimal
* scaleHALF_EVENdouble
*
* @param v double
* @param scale
* @return double
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
String s = Double.toString(v);
BigDecimal b = new BigDecimal(s);
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, RoundingMode.HALF_EVEN).doubleValue();
}
/**
* BigDecimal
* double便BigDecimal使
*
* @param bigDecimal BigDecimal
* @param bigDecimal2 BigDecimal
* @param bigDecimal3 BigDecimal
* @return double
*/
public static double add(BigDecimal bigDecimal, BigDecimal bigDecimal2, BigDecimal bigDecimal3) {
return bigDecimal.add(bigDecimal2).add(bigDecimal3).doubleValue();
}
/**
* BigDecimal
* doubleBigDecimal
*
* @param preDepositPrice BigDecimal
* @param finalPrice BigDecimal
* @return double
*/
public static double add(BigDecimal preDepositPrice, BigDecimal finalPrice) {
return preDepositPrice.add(finalPrice).doubleValue();
}
}
Loading…
Cancel
Save