java计算百分比值的方法,涉及java数值运算的技巧
分子作被除数,分母作除数(分母不为0),运算结果和整数一起对应全部有理数
BigDecimalUtil工具类
import java.math.BigDecimal;
public class BigDecimalUtil {
private BigDecimalUtil() {
}
private static final int ZERO = 0;
public static Boolean isSmallZero(BigDecimal value1) {
return getNotNullValue(value1).compareTo(new BigDecimal(ZERO)) < ZERO;
}
public static Boolean isBigZero(BigDecimal value1) {
return getNotNullValue(value1).compareTo(new BigDecimal(ZERO)) > ZERO;
}
public static BigDecimal getNotNullValue(BigDecimal value) {
return null == value ? new BigDecimal(ZERO) : value;
}
public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
return getNotNullValue(v1).add(getNotNullValue(v2));
}
public static BigDecimal add(BigDecimal v1, BigDecimal v2, BigDecimal v3) {
return getNotNullValue(v1).add(getNotNullValue(v2).add(getNotNullValue(v3)));
}
public static BigDecimal subtract(BigDecimal value1, BigDecimal value2) {
return getNotNullValue(value1).subtract(getNotNullValue(value2));
}
public static BigDecimal multiply(BigDecimal value1, BigDecimal value2) {
return getNotNullValue(value1).multiply(getNotNullValue(value2));
}
public static BigDecimal divide(BigDecimal value1, BigDecimal value2, int scale) {
return value1.divide(value2, scale, BigDecimal.ROUND_HALF_UP);
}
}
百分比计算工具类
import java.math.BigDecimal;
public class PercentageUtil {
public static final int PERCENTAGE = 100;
private PercentageUtil() {
}
public static BigDecimal getDenominator(long value1, long value2) {
return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2));
}
public static BigDecimal getDenominator(String value1, String value2) {
return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2));
}
public static BigDecimal getDenominator(long value1, long value2, long value3) {
return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2), new BigDecimal(value3));
}
public static BigDecimal getDenominator(String value1, String value2, String value3) {
return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2), new BigDecimal(value3));
}
public static BigDecimal getDenominator1(String... args) {
BigDecimal denominator = BigDecimal.ZERO;
for (String arg : args) {
denominator = denominator.add(new BigDecimal(arg));
}
return denominator;
}
public static BigDecimal getComputePercent(long numerator, long denominator, int scale) {
BigDecimal result = new BigDecimal(numerator).multiply(new BigDecimal(100))
.divide(new BigDecimal(denominator), scale, BigDecimal.ROUND_HALF_UP);
return result;
}
public static BigDecimal getComputePercent(String numerator, String denominator, int scale) throws IllegalAccessException {
BigDecimal result = BigDecimalUtil.multiply(new BigDecimal(numerator), new BigDecimal(PERCENTAGE));
return BigDecimalUtil.divide(result, new BigDecimal(denominator), scale);
}
public static void main(String[] args) throws IllegalAccessException {
//分母1
BigDecimal sum = getDenominator("298", "34123", "65789");
//百分比1
BigDecimal percentt1 = getComputePercent("298", sum.toString(), 2);
BigDecimal percentt2 = getComputePercent("34123", sum.toString(), 2);
BigDecimal percentt3 = getComputePercent("65789", sum.toString(), 2);
System.out.println(percentt1 + "%");
System.out.println(percentt2 + "%");
System.out.println(percentt3 + "%");
BigDecimal test = getDenominator1("298", "34123", "65789");
System.out.println(" 分母1 " + sum);
System.out.println(" 分母2 " + test);
}
}
测试结果如下



