3
groovy中BigDecimal的默認比例是多少?舍入?groovy中bigdecimal的默認比例
所以當試圖做算了一筆賬:在這個
def x = 10.0/30.0 //0.3333333333
def y = 20.0/30.0 //0.6666666667
基地,我可以假設它使用規模10和舍入半升。 雖然找到官方文檔說有困難。
groovy中BigDecimal的默認比例是多少?舍入?groovy中bigdecimal的默認比例
所以當試圖做算了一筆賬:在這個
def x = 10.0/30.0 //0.3333333333
def y = 20.0/30.0 //0.6666666667
基地,我可以假設它使用規模10和舍入半升。 雖然找到官方文檔說有困難。
您可以在官方文檔中找到它:The case of the division operator
5.5.1。除法運算的情況下
的除法運算符/(和/ =除法和分配)產生 如果操作數是一個浮動或雙面,和一個 BigDecimal的結果,否則雙結果(當兩個操作數都是任意組合 整數類型short,char,byte,int,long,BigInteger或 BigDecimal)。如果 劃分是確切
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;
}
}
有點晚了問,但,你怎麼知道正在使用BigDecimalMath.java? – froi