1.類 簡化示例
屬於java.math包,因此包含各種數學運算,abs,pow等等。
package java.math;
public class BigDecimal {
//值的絕對long型表示
private final transient long intCompact;
//值的小數點后的位數
private final int scale;
private final BigInteger intVal;
//值的有效位數,不包含正負符號
private transient int precision;
private transient String stringCache;
//加、減、乘、除、絕對值
public BigDecimal add(BigDecimal augend) {}
public BigDecimal subtract(BigDecimal subtrahend) {}
public BigDecimal multiply(BigDecimal multiplicand) {}
public BigDecimal divide(BigDecimal divisor) {}
public BigDecimal abs() {}
}
2.對象簡化示例
2.1 以long型的intCompact和scale來存儲精確的值。
2.2 包含stringCache,因此創建BigDecimal對象時,優先轉換成String類型,比如double轉BigDecimal也是先double轉成String,再String轉成BigDecimal.



3.加減乘除的實現
加法:long類型 +
減法:轉成加法,加負數
乘法: long類型 *, 多些進位超界判斷
除法: long類型 /, 多些小數位數保留判斷
private static long add(long xs, long ys){
long sum = xs + ys;
if ( (((sum ^ xs) & (sum ^ ys))) >= 0L) { // not overflowed
return sum;
}
return INFLATED;
}
4.BigDecimal能更精確表示帶小數點的數值,因為采用了long intCompact和int scale來表示數值,而不是浮點型的科學計數法。
