[java基礎原理] BigDecimal


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM