1.類 簡化示例java
屬於java.math包,所以包含各類數學運算,abs,pow等等。ide
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來存儲精確的值。blog
2.2 包含stringCache,所以建立BigDecimal對象時,優先轉換成String類型,好比double轉BigDecimal也是先double轉成String,再String轉成BigDecimal.ip
3.加減乘除的實現ci
加法:long類型 +數學
減法:轉成加法,加負數string
乘法: long類型 *, 多些進位超界判斷io
除法: long類型 /, 多些小數位數保留判斷class
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來表示數值,而不是浮點型的科學計數法。