欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 深入理解Java中的BigInteger和 BigDecimal,再也不怕面试了

程序员文章站 2024-02-07 13:14:40
Integer类作为int的包装类,能存储的最大整型值为2^31-1 ,Long类最大为2^63-1,虽然比Integer类大了很多,但是也是有限的。如果想要表示更大的整数,不管是基本数据类型还是它们对应的包装类都无法实现。Java中提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类包含的方法、提供的操作与基本类型及其对应的包装类相同,并提供了java.lang.Math的所有相关方法。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数...

Integer类作为int的包装类,能存储的最大整型值为2^31-1 ,Long类最大为2^63-1,虽然比Integer类大了很多,但是也是有限的。如果想要表示更大的整数,不管是基本数据类型还是它们对应的包装类都无法实现。Java中提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类包含的方法、提供的操作与基本类型及其对应的包装类相同,并提供了java.lang.Math的所有相关方法。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。

1、BigInteger类

java.math包下的BigInteger可以表示不可变的任意精度的整数,主要是针对整型大数字的处理类,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。
常用构造器:

BigInteger(String val):根据字符串构建BigInteger对象
//如下所示:
BigInteger bigInteger=new BigInteger("1234567891011121314151617181920");
System.out.println(bigInteger);//1234567891011121314151617181920

常用方法:

public BigInteger abs():返回对象的绝对值
public BigInteger pow(int exponent) :返回对象的平方数
public BigInteger add(BigInteger val) :返回对象与另一个对象的和
public BigInteger subtract(BigInteger val) :返回对象与另一个对象的差
public BigInteger multiply(BigInteger val):返回对象与另一个对象的积
public BigInteger divide(BigInteger val) :返回对象与另一个对象的商,整数相除只保留整数部分
public BigInteger remainder(BigInteger val) :返回对象与另一个对象的余数
public int compareTo(BigInteger val):比较对象与另一个对象的大小

2、BigDecimal类

由于float类型和double在计算时很容易丢失精度。但在商业计算中,尤其是与计算货币值相关时,要求数字的精度很高,Java提供了java.math.BigDecimal类用来实现任意精度的浮点数运算,可以用它进行精确的货币计算。
常用构造器:

BigDecimal(int val):根据int类型的数字构建BigDecimal对象
BigDecimal(long val):根据long类型的数字构建BigDecimal对象
BigDecimal(double val):根据double类型的数字构建BigDecimal对象
BigDecimal(String val):根据字符串构建BigDecimal对象
BigDecimal(BigInteger val):根据BigInteger类型的数字构建BigDecimal对象

常用方法:

public BigDecimal abs():返回对象的绝对值
public BigDecimal pow(int n) :返回对象的平方数
public BigDecimal add(BigDecimal augend)  :返回对象与另一个对象的和
public BigDecimal subtract(BigDecimal subtrahend):返回对象与另一个对象的差
public BigDecimal multiply(BigDecimal multiplicand):返回对象与另一个对象的积
public BigDecimal remainder(BigDecimal divisor):返回对象与另一个对象的余数
public int compareTo(BigDecimal val):比较对象与另一个对象的大小

BigDecimal可以用来做超大的浮点数的运算,比如+ - * /的运算,其中除法运算是最复杂的,因为商的位数可能有除不进的情况,此时需要考虑末位小数点的处理。

//参数1:被除数   参数2:表示小数近似处理的模式(舍入模式)
public BigDecimal divide(BigDecimal divisor, int roundingMode) 

常用的舍入模式:

  • BigDecimal.ROUND_UP:最后一位如果大于0,则向前进一位,正负数都如此;
  • BigDecimal.ROUND_DOWN:最后一位不管是什么都会被舍弃;
  • BigDecimal.ROUND_CEILING:如果是正数,按ROUND_UP处理,如果是负数,按照ROUND_DOWN处理;
    例如8.1->9; -8.1->-8;所以这种近似的结果都会>=实际值。
  • BigDecimal.ROUND_FLOOR:跟BigDecimal_ROUND_CEILING相反,如果是正数,按ROUND_DOWN处理,如果是负数,按照ROUND_UP处理;
    例如8.1->8;-8.1->-9,这种处理的结果<=实际值
  • BigDecimal.ROUND_HALF_UP:如果最后一位<5则舍弃,如果>=5, 向前进一位,即为四舍五入模式;
    例如:7.5->8;7.4->7;-7.5->-8
  • BigDecimal.ROUND_HALF_DOWN:如果最后一位<=5则舍弃,如果>5,则向前进一位;
    例如:7.5->7;7.6->8;-7.5->-7
  • BigDecimal.ROUND_HALF_EVEN :如果倒数第二位是奇数,按照BigDecimal.ROUND_HALF_UP处理,如果是偶数,按照BigDecimal.ROUND_HALF_DOWN来处理。
    例如:7.5->8;8.5->8;7.4->7;-7.5->-8

本文地址:https://blog.csdn.net/Mr_wxc/article/details/107333919

相关标签: Java java