java大数据类型BigDecimal和BigInteger

一、BigDecimal

在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法

1.构造函数
BigDecimal(BigInteger val)
BigDecimal(BigInteger unscaledVal, int scale)
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
BigDecimal(BigInteger val, MathContext mc)

BigDecimal(char[] in)
BigDecimal(char[] in, int offset, int len)	
BigDecimal(char[] in, int offset, int len, MathContext mc)		
BigDecimal(char[] in, MathContext mc)

BigDecimal(String val)		
BigDecimal(String val, MathContext mc)

BigDecimal(double val)		
BigDecimal(double val, MathContext mc)
		
BigDecimal(int val)		
BigDecimal(int val, MathContext mc)

BigDecimal(long val)
BigDecimal(long val, MathContext mc)
2、绝对值
BigDecimal abs() 
	
BigDecimal abs(MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("2.13");
		
BigDecimal bigDecimal2 = new BigDecimal("-2.13");
		
bigDecimal1 = bigDecimal1.abs();//2.13
		
bigDecimal2 = bigDecimal2.abs();//2.1		
3、加法
BigDecimal add(BigDecimal augend)
		
BigDecimal add(BigDecimal augend, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("2.13");
		
BigDecimal bigDecimal2 = new BigDecimal("-2.1321");
		
bigDecimal1 = bigDecimal1.add(bigDecimal2);

System.out.println(bigDecimal1);//-0.0021
4、除法
BigDecimal divide(BigDecimal divisor)
BigDecimal divide(BigDecimal divisor, int roundingMode)
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
BigDecimal divide(BigDecimal divisor, MathContext mc)
BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");
BigDecimal bigDecimal2 = new BigDecimal("2.0");
bigDecimal1 = bigDecimal1.divide(bigDecimal2);//5
5、返回当前商值和余数的数值
BigDecimal[] divideAndRemainder(BigDecimal divisor)

BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");
BigDecimal bigDecimal2 = new BigDecimal("2.12");
BigDecimal[] bigDecimal3 = bigDecimal1.divideAndRemainder(bigDecimal2);//[4,1.52]
6、返回当前/除数的整数部分
BigDecimal divideToIntegralValue(BigDecimal divisor)
	
BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");
BigDecimal bigDecimal2 = new BigDecimal("3");
BigDecimal bigDecimal3 = bigDecimal1.divideToIntegralValue(bigDecimal2);//3
7、乘法
BigDecimal multiply(BigDecimal multiplicand)
BigDecimal multiply(BigDecimal multiplicand, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");	
BigDecimal bigDecimal2 = new BigDecimal("2.12");
BigDecimal bigDecimal4 = bigDecimal1.multiply(bigDecimal2);//21.20
8、两值比较,返回结果
BigDecimal max(BigDecimal val)

BigDecimal min(BigDecimal val)

int compareTo(BigDecimal val)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");
BigDecimal bigDecimal2 = new BigDecimal("2.12");
BigDecimal bigDecimal4 = bigDecimal1.max(bigDecimal2);//10
9、前置负号
BigDecimal negate()

BigDecimal negate(MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("-10");
BigDecimal bigDecimal4 = bigDecimal1.negate();//10
10、前置加号
BigDecimal plus()
BigDecimal plus(MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("-10");
System.out.println(bigDecimal1.plus());//-10
BigDecimal bigDecimal2 = new BigDecimal("22");
System.out.println(bigDecimal2.plus());//22
11、返回n次幂的值
BigDecimal pow(int n)
		
BigDecimal pow(int n, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("-10");		
BigDecimal bigDecimal4 = bigDecimal1.pow(2);		
System.out.println(bigDecimal4);//100
12、返回余数,其值为的值(this % divisor)
BigDecimal remainder(BigDecimal divisor)
		
BigDecimal remainder(BigDecimal divisor, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");	
BigDecimal bigDecimal2 = new BigDecimal("4");
BigDecimal bigDecimal4 = bigDecimal1.remainder(bigDecimal2);
System.out.println(bigDecimal4);//2
13、用于格式化小数点
BigDecimal setScale(int newScale)//《scale指的是你要保留几位小数》,默认舍入模式是ROUND_UNNECESSARY

BigDecimal setScale(int newScale, int roundingMode)

BigDecimal setScale(int newScale, RoundingMode roundingMode)

常见RoundingMode是舍入模式,其值如下

1、UP:绝对值向上取整模式,不论正负

  BigDecimal bigDecimal1 = new BigDecimal("4.1134").setScale(1, RoundingMode.UP);//4.2
  BigDecimal bigDecimal1 = new BigDecimal("4.1034").setScale(1, RoundingMode.UP);//4.2
  BigDecimal bigDecimal1 = new BigDecimal("-4.1034").setScale(1, RoundingMode.UP);//-4.2

2、CEILING:向上取整模式

BigDecimal bigDecimal1 = new BigDecimal("4.1134").setScale(1, RoundingMode.CEILING);//4.2
BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.CEILING);//4.2
BigDecimal bigDecimal3 = new BigDecimal("-4.1034").setScale(1, RoundingMode.CEILING);//-4.1

3、DOWN:绝对值向下取整模式,不论舍入位是否为零,都直接舍弃

BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.DOWN);//4.1
BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.DOWN);//-4.1

4、FLOOR:向下取整模式

BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.FLOOR);//4.1
BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.FLOOR);//4.1
BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.FLOOR);//-4.2
BigDecimal bigDecimal4 = new BigDecimal("-4.1034").setScale(1, RoundingMode.FLOOR);//-4.2

5、HALF_UP:四舍五入模式

BigDecimal bigDecimal1 = new BigDecimal("4.1634").setScale(1, RoundingMode.HALF_UP);//4.2
BigDecimal bigDecimal2 = new BigDecimal("4.1034").setScale(1, RoundingMode.HALF_UP);//4.1
BigDecimal bigDecimal3 = new BigDecimal("-4.1634").setScale(1, RoundingMode.HALF_UP);//-4.2
BigDecimal bigDecimal4 = new BigDecimal("-4.1034").setScale(1, RoundingMode.HALF_UP);//-4.1

6、UNNECESSARY:保留小数点位数小于实际位数,则抛出ArithmeticException。

BigDecimal bigDecimal1 = new BigDecimal("2.5").setScale(1, RoundingMode.UNNECESSARY);//2.5
//java.lang.ArithmeticException
BigDecimal bigDecimal2 = new BigDecimal("2.51").setScale(1, RoundingMode.UNNECESSARY);
14、去除末尾多余的0
BigDecimal stripTrailingZeros()

案例

BigDecimal c = new BigDecimal("2.200").stripTrailingZeros();//2.2
15、减法
BigDecimal subtract(BigDecimal subtrahend)
		
BigDecimal subtract(BigDecimal subtrahend, MathContext mc)

案例

BigDecimal bigDecimal1 = new BigDecimal("10");
		
BigDecimal bigDecimal2 = new BigDecimal("4.2");
		
BigDecimal bigDecimal4 = bigDecimal1.subtract(bigDecimal2);//5.8
16、变为字符串
String toEngineeringString()有必要时使用工程计数法
		
String toPlainString()不使用任何指数
		
String toString()有必要时使用科学计数法
17、返回其精度
BigDecimal ulp()	

案例

BigDecimal bigDecimal2 = new BigDecimal("4.20")ulp();//0.01
18、类型转换
static BigDecimal valueOf(double val)
static BigDecimal valueOf(long val)
static BigDecimal valueOf(long unscaledVal, int scale)
BigInteger toBigInteger()
BigInteger toBigIntegerExact()
19、返回此BigDecimal信息
int precision()//返回这个BigDecimal的精确
int scale()//返回这个BigDecimal的小数保留位数
int signum()//此方法返回-1,0或1作为此BigInteger的值对应是负,零或正数
		
BigDecimal scaleByPowerOfTen(int n) //返回一个BigDecimal,其数值等于(this* 10 n)。	
BigInteger unscaledValue() //返回BigInteger其值为此的未缩放值的值BigDecimal。	
BigDecimal round(MathContext mc) //BigDecimal根据MathContext设置返回舍入 。

二、BigInteger

BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。

1.构造函数
BigInteger(byte[] val)//将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger。
BigInteger(int signum, byte[] magnitude)//将BigInteger的符号大小表示形式转换为BigInteger。
BigInteger(int bitLength, int certainty, Random rnd)//构造一个随机生成的正BigInteger,它可能是素数,具有指定的bitLength。
BigInteger(int numBits, Random rnd)//构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。
BigInteger(String val)//将BigInteger的十进制字符串表示形式转换为BigInteger。
BigInteger(String val, int radix)//将指定基数中的BigInteger的String表示形式转换为BigInteger。
2、数学信息获取
BigInteger max(BigInteger val) //返回两个大整数的最大者
BigInteger min(BigInteger val) //两个大整数的最小者
BigInteger mod(BigInteger val) //取模运算
BigInteger abs() //绝对值
BigInteger negate()//相反数
byte[] toByteArray(BigInteger val)//将大整数转换成二进制反码保存在byte数组中

案例

BigInteger bigInteger = new BigInteger("21");
BigInteger bigInteger1 = new BigInteger("2");
System.out.println(bigInteger.mod(bigInteger1));//1
3、加法和减法
//加法
BigInteger add(BigInteger val)
BigInteger subtract(BigInteger val)//减法

案例

 BigInteger bigInteger = new BigInteger("10");
BigInteger bigInteger1 = new BigInteger("22");
 System.out.println(bigInteger.subtract(bigInteger1));//22
4、乘法,除法,取余数
BigInteger divide(BigInteger val)//除法

BigInteger multiply(BigInteger val) //乘法

BigInteger remainder(BigInteger val) //返回当前大整数除以val的余数

案例

BigInteger bigInteger = new BigInteger("20");
BigInteger bigInteger1 = new BigInteger("2");
System.out.println(bigInteger.divide(bigInteger1));//10
5、最大公约数
BigInteger gcd(BigInteger val) //返回大整数的最大公约数
6、 次方
BigInteger pow(int exponent)返回当前大整数的exponent次方

案例

BigInteger bigInteger = new BigInteger("21");
System.out.println(bigInteger.pow(2));//441
7、 逻辑运算
BigInteger and(BigInteger val)  返回两个大整数的按位与的结果
BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
BigInteger not() 返回当前大整数的非
BigInteger or(BigInteger val) 返回两个大整数的按位或
BigInteger xor(BigInteger val) 返回两个大整数的异或
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值