8_全面分析java.math.BigDecimal

本文详细探讨了Java中BigDecimal类的重要特性,包括其继承结构、核心成员变量、构造方法和一系列数学运算方法如加减乘除、取反、幂运算等。同时,解释了scale、precision和intVal的作用,并介绍了BigDecimal如何保证计算精度。

1、BigDecimal继承接口以及实现类

public class BigDecimal

extends Number

implements Comparable<BigDecimal>

 

 

 

2、对于scale的理解

19/100 = 0.19 // integer=19, scale=2

但是
21/110 = 0.190 // integer=190, scale=3

 

3、private final BigInteger intVal;的作用

定义了Integer,见第二个问题

Final关键字的理解(链接):final

 

4、private final int scale;的作用

定义标度

 

5、private transient int precision;的作用

定义精度

Transient的链接:transient

 

6、BigDecimal的构造方法

主要就是将各种类型的数字转换成BigDecimal类型

BigDecimal(BigInteger val)
          
将 BigInteger 转换为 BigDecimal。

BigDecimal(BigInteger unscaledVal, int scale)
          
将 BigInteger 非标度值和 int 标度转换为 BigDecimal。

BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
          
将 BigInteger 非标度值和 int 标度转换为 BigDecimal(根据上下文设置进行舍入)。

BigDecimal(BigInteger val, MathContext mc)
          
将 BigInteger 转换为 BigDecimal(根据上下文设置进行舍入)。

BigDecimal(char[] in)
          
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列。

BigDecimal(char[] in, int offset, int len)
          
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列,同时允许指定子数组。

BigDecimal(char[] in, int offset, int len, MathContext mc)
          
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列,同时允许指定子数组,并根据上下文设置进行舍入。

BigDecimal(char[] in, MathContext mc)
          
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列(根据上下文设置进行舍入)。

BigDecimal(double val)
          
将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。

BigDecimal(double val, MathContext mc)
          
将 double 转换为 BigDecimal(根据上下文设置进行舍入)。

BigDecimal(int val)
          
将 int 转换为 BigDecimal。

BigDecimal(int val, MathContext mc)
          
将 int 转换为 BigDecimal(根据上下文设置进行舍入)。

BigDecimal(long val)
          
将 long 转换为 BigDecimal。

BigDecimal(long val, MathContext mc)
          
将 long 转换为 BigDecimal(根据上下文设置进行舍入)。

BigDecimal(String val)
          
将 BigDecimal 的字符串表示形式转换为 BigDecimal。

BigDecimal(String val, MathContext mc)
          
将 BigDecimal 的字符串表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符串(按照上下文设置进行舍入)。

 

7、abs() 方法的作用

返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()。

public BigDecimal abs() {
   
return (signum() < 0 ? negate() : this);
}

signum涉及到移位运算。

 

8、add(BigDecimal augend) 方法的作用

返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。

 

9、subtract(BigDecimal subtrahend) 的作用

       减法

 

10、multiply(BigDecimal multiplicand) 的作用

       乘法

 

11、divide(BigDecimal divisor) 的作用

       除法

 

12、max(BigDecimal val) 的作用

  返回此 BigDecimal 和 val 的最大值。

 

13、min(BigDecimal val) 的作用

       返回此 BigDecimal 和 val 的最小值。

 

14、negate() 的作用

       取反

 

15、plus() 的作用

       返回 BigDecimal,其值为 (+this),其标度为 this.scale()。

 

16、pow(int n) 的作用

        返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。

 

17、precision() 的作用

返回此 BigDecimal 的精度

比如22.55555的精度是7,有几个数字精度就是几
 

18、remainder(BigDecimal divisor) 的作用

        取模
 

19、scaleByPowerOfTen(int n) 的作用

 返回其数值等于 (this * 10n) 的 BigDecimal。
 

20、setScale(int newScale) 的作用

返回一个 BigDecimal,其标度为指定值,其值在数值上等于此 BigDecimal 的值。
 

21signum的作用


 
返回此 BigDecimal 的正负号函数。

当此 BigDecimal 的值为负、零或正时,返回 -1、0 或 1。

 

22、stripTrailingZeros() 的作用

返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
 

23、BigDecimal的底层数据结构使什么?它是怎么保证精度的?(阿里面试题)

目录

1、BigDecimal继承接口以及实现类

2、对于scale的理解

3、private final BigInteger intVal;的作用

 

4、private final int scale;的作用

5、private transient int precision;的作用

6、BigDecimal的构造方法

7、abs() 方法的作用

8、add(BigDecimal augend) 方法的作用

9、subtract(BigDecimal subtrahend) 的作用

10、multiply(BigDecimal multiplicand) 的作用

11、divide(BigDecimal divisor) 的作用

12、max(BigDecimal val) 的作用

13、min(BigDecimal val) 的作用

14、negate() 的作用

15、plus() 的作用

16、pow(int n) 的作用

17、precision() 的作用

18、remainder(BigDecimal divisor) 的作用

19、scaleByPowerOfTen(int n) 的作用

20、setScale(int newScale) 的作用

21、signum的作用

22、stripTrailingZeros() 的作用

23、BigDecimal的底层数据结构使什么?它是怎么保证精度的?(阿里面试题)


十进制整数在转化成二进制数时不会有精度问题,那么把十进制小数扩大N倍让它在整数的维度上进行计算,并保留相应的精度信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值