[java基础原理] BigDecimal

匿名 (未验证) 提交于 2019-12-02 21:35:18

1.类 简化示例

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.1 以long型的intCompact和scale来存储精确的值。

2.2 包含stringCache,因此创建BigDecimal对象时,优先转换成String类型,比如double转BigDecimal也是先double转成String,再String转成BigDecimal.

3.加减乘除的实现

加法: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;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!