groovy中默认的bigdecimal标度

fro*_*roi 4 groovy bigdecimal

groovy中BigDecimal的默认比例是多少?和舍入?

所以在尝试进行计算时:

def x = 10.0/30.0 //0.3333333333
def y = 20.0/30.0 //0.6666666667
Run Code Online (Sandbox Code Playgroud)

基于此,我可以假设它使用了比例10并且舍入了一半.虽然找不到官方文件,却很难找到.

jal*_*aba 5

您可以在官方文档中找到它:除法运算符的情况

5.5.1.除法运算符的情况

如果操作数是float或double,则除法运算符/(和/ =用于除法和赋值)产生双重结果,否则产生BigDecimal结果(当两个操作数都是整数类型short,char,byte,int的任意组合时, long,BigInteger或BigDecimal).

如果除法是精确的(即产生可以在相同精度和比例的范围内表示的结果),或者使用具有两个操作数的最大精度的MathContext,则使用divide()方法执行BigDecimal除法.精度加上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;
    }
}
Run Code Online (Sandbox Code Playgroud)