一、API上说MathContext
该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则,例如由 BigDecimal
类实现的规则。
基本独立设置为:
precision :某个操作使用的数字个数;结果舍入到此精度 roundingMode :一个RoundingMode
对象,该对象指定舍入使用的算法。
说明:
precision是指的是整个数字精确后的长度,而非理解的精度(scale)。
二、实例
public static int getLongLength(java.math.BigDecimal numericalValue) {
String sNumericalValue = numericalValue.toPlainString();
String[] arrayValues = { "", "" };
if (!(sNumericalValue.indexOf(".") < 0)) {
arrayValues = sNumericalValue.split("\\.");
} else {
arrayValues[0] = sNumericalValue;
}
if (arrayValues[0].contains("-")) {
arrayValues[0] = arrayValues[0].replaceAll("-", "");
}
int intLength = arrayValues[0].length();
return intLength;
}
public static java.math.BigDecimal muliply(java.math.BigDecimal bg1, java.math.BigDecimal bg2, int scale,
RoundingMode roundingMode) {
java.math.BigDecimal result = bg1.multiply(bg2);
int intLength = getLongLength(result);
MathContext context = new MathContext(intLength + scale, roundingMode);
result = result.round(context);
return result;
}
public static void main(String[] args) {
System.out.print(BigDecimal.muliply(new java.math.BigDecimal(1911.11),
new java.math.BigDecimal(10.12), 2, RoundingMode.HALF_UP));
}