[java基礎原理] BigDecimal

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來表示數值,而不是浮點型的科學計數法。

相關文章
相關標籤/搜索