2015-10-05 33 views
3

groovy中BigDecimal的默認比例是多少?舍入?groovy中bigdecimal的默認比例

所以當試圖做算了一筆賬:在這個

def x = 10.0/30.0 //0.3333333333 
def y = 20.0/30.0 //0.6666666667 

基地,我可以假設它使用規模10和舍入半升。 雖然找到官方文檔說有困難。

回答

5

您可以在官方文檔中找到它: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; 
    } 
} 
+0

有點晚了問,但,你怎麼知道正在使用BigDecimalMath.java? – froi