groovy中BigDecimal的默认比例是多少?和舍入?
因此,在尝试进行计算时:
def x = 10.0/30.0 //0.3333333333
def y = 20.0/30.0 //0.6666666667
基于此,我可以假设它使用了刻度10并且向上舍入了一半。 虽然找不到官方文件,但却很难找到。
答案 0 :(得分:5)
您可以在官方文档中找到它:The case of the division operator
5.5.1。除法运算符的情况
除法运算符/(和/ =用于除法和赋值)产生 如果操作数是浮点数或双精度数,则为double结果 否则为BigDecimal结果(当两个操作数都是任意组合时) 整数类型short,char,byte,int,long,BigInteger或 小数)。
如果使用divide()方法执行BigDecimal除法 除法是准确的(即产生可以表示的结果 在相同精度和比例的范围内),或使用 MathContext,精度为两个操作数的最大值 精度 加上10的额外精度,以及最大的刻度 10和操作数的最大比例 。
并在BigDecimalMath.java
中查看:
public Number divideImpl(Number left, Number right) {
BigDecimal bigLeft = toBigDecimal(left);
BigDecimal bigRight = toBigDecimal(right);
try {
return bigLeft.divide(bigRight);
} catch (ArithmeticException e) {
// set a DEFAULT precision if otherwise non-terminating
int precision = Math.max(bigLeft.precision(), bigRight.precision()) + DIVISION_EXTRA_PRECISION;
BigDecimal result = bigLeft.divide(bigRight, new MathContext(precision));
int scale = Math.max(Math.max(bigLeft.scale(), bigRight.scale()), DIVISION_MIN_SCALE);
if (result.scale() > scale) result = result.setScale(scale, BigDecimal.ROUND_HALF_UP);
return result;
}
}