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并且舍入了一半.虽然找不到官方文件,却很难找到.
您可以在官方文档中找到它:除法运算符的情况
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)
| 归档时间: |
|
| 查看次数: |
1990 次 |
| 最近记录: |