JAVA基础(常用API) —— BigInteger和BigDecimal

经过之前对于API的学习:JAVA基础 —— API

接下来的文章让我们来了解一下不同类下的方法,但是这些方法不要去背。

而是要去记一下类名和类作用,也可以在以后去查阅API帮助文档。

Math、System、Runtime和ObjectJAVA基础 (常用API)—— Math、System、Runtime和Object

BigInteger和BigDecimal

JAVa基础(常用API) —— BigInteger和BigDecimal
正则表达式JAVA基础(常用API) —— 正则表达式
时间相关类JAVA基础(常用API) —— 时间相关类
包装类JAVA基础(常用API) —— 包装类

目录

一、BigInteger

1. BigInteger的构造方法

2.  BigInteger的常见成员方法

3.  BigInteger的底层存储方式

二、BigDecimal

1. BigDecimal的使用

2. BigDecimal的底层存储方式


一、BigInteger

在Java中,整数有四种类型:byte、short、int、long

在底层占用字节个数:byte1个字节、short2个字节、int4个字节、long8个字节。

1. BigInteger的构造方法

方法名说明
public BigInteger(int num,Random rnd)获取随机大整数,范围[ 0 ~ 2的num次方-1]
public BigInteger(String val)获取指定的大整数
public BigInteger(String val,int radix)获取指定进制的大整数
public static BigInteger valueOf(long val)静态方法获取BigInteger的对象,内部有优化
对象一旦创建,内部记录的值不能发生改变
import java.math.BigInteger;
import java.util.Random;

public class BigIntegerTest {
	public static void main(String[] args) {
		// 获取一个随机大整数
		Random r = new Random();
		for (int i = 0; i < 100; i++) {
			BigInteger bd1 = new BigInteger(4, r);
			System.out.println(bd1); // [0 ~ 15]
		}

		// 获取指定大整数
		BigInteger bd2 = new BigInteger("100");
		System.out.println(bd2); // 100
		// 细节:字符串必须是整数,否则会报错
		// BigInteger bd3 = new BigInteger("1.1"); //报错
		// BigInteger bd4 = new BigInteger("abc"); //报错

		// 获取指定进制的大整数
		BigInteger bd3 = new BigInteger("100", 2); // 4
		System.out.println(bd3);
		// 细节:字符串必须是整数,且必须要跟进制吻合
		// BigInteger bd4 = new BigInteger("123",2); //报错

		//静态获取BigInteger对象,内部优化
		//细节:1.能表示范围小,在long取值范围内,超出就不行
		//2.在内部对常用数字:-16~16进行了优化
		BigInteger bd5 = BigInteger.valueOf(16);
		BigInteger bd6 = BigInteger.valueOf(16);
		System.out.println(bd5.equals(bd6)); //true
		
		BigInteger bd4 = BigInteger.valueOf(100);
		System.out.println(bd4); //100
	}
}

2.  BigInteger的常见成员方法

方法名说明
public BigInteger add(BigInteger val)加法
public BigInteger subtract(BigInteger val)减法
public BigInteger multiply(BigInteger val)乘法
public BigInteger divide(BigInteger val)除法,获取商
public BigInteger[] divideAndRemainder(BigInteger val)除法,获取商和余数
public boolean equals(object x)比较是否相同
public BigInteger pow(int exponent )次幂
public BigInteger max/min(BigInteger val)返回较大值/较小值
public int intValue(BigInteger val)

转为int类型整数,超出范围数据有误

public class BigIntegerTest {
	public static void main(String[] args) {
		//创建两个BigInteger对象
		BigInteger bi1 = BigInteger.valueOf(10);
		BigInteger bi2 = BigInteger.valueOf(5);
		
		//1.加法
		BigInteger bi3 = bi1.add(bi2);
		System.out.println(bi3); //15
		
		//2.除法 获取商和余数
		BigInteger[] arr = bi1.divideAndRemainder(bi2);
		System.out.println(arr.length); //2
		System.out.println(arr[0]); //2  0索引:商
		System.out.println(arr[1]); //0  1索引:余数
		
		//3.比较是否相同
		boolean result = bi1.equals(bi2);
		System.out.println(result); // false
		
		//4.次幂
		BigInteger bi4=bi1.pow(2);
		System.out.println(bi4); //100
		
		//5.最大值
		BigInteger bi5 = bi1.max(bi2);
		System.out.println(bi5);  //10
		//没有改变内部值 只能判断比较而已
		System.out.println(bi5 == bi1); //true
		System.out.println(bi5 == bi2);  //false
		
		//转为int基本类型
		BigInteger bi6 = BigInteger.valueOf(1000);
		int i = bi6.intValue();
		System.out.println(i);  //1000
		double j = bi6.doubleValue();
		System.out.println(j); //1000.0
 	} 
}

3.  BigInteger的底层存储方式

① 对于计算机而言,其实是没有数据类型的概念的,都是01010101;

② 数据类型是编程语言自己规定的。

二、BigDecimal

  • 用于小数的精确计算
  • 用于表示很大的小数
  • 作用:表示较大的小数和解决小数运算精度失真问题。
方法名说明
构造方法获取BigDecimal对象public BigDecimal(double val)
public BigDecimal(String val)
静态方法获取BigDecimal对象public static BigDecimal valueOf(double val)
import java.math.BigDecimal;

public class BigDecimalTest {
	public static void main(String[] args) {
		// 1.通过传递double类型小数来创建对象
		// 细节:这种方式可能不精确 不建议使用
		BigDecimal bd1 = new BigDecimal(0.01);
		BigDecimal bd2 = new BigDecimal(0.09);
		System.out.println(bd1); // 0.01000000000000000020816681711721685132943093776702880859375
		System.out.println(bd2); // 0.0899999999999999966693309261245303787291049957275390625

		// 2.通过传递字符表示的小数来创建对象
		BigDecimal bd3 = new BigDecimal("0.01");
		BigDecimal bd4 = new BigDecimal("0.09");
		System.out.println(bd3); // 0.01
		System.out.println(bd4); // 0.09

		// 3.通过静态方法获取对象
		BigDecimal bd5 = BigDecimal.valueOf(10);
		System.out.println(bd5); // 10

		BigDecimal bd6 = BigDecimal.valueOf(10.0);
		BigDecimal bd7 = BigDecimal.valueOf(10.0);
		System.out.println(bd6 == bd7); // false

		// 细节:
		// 1.如果要表示的数字不大,没有超出double取值范围,建议使用静态方法
		// 2.如果要表示的数字比较大,超出了double取值范围,建议使用构造方法
		// 3.如果我们传递的是0~10之间整数,那么方法会返回已经创建好的对象,不会new
	}
}

1. BigDecimal的使用

方法名说明
public static BigDecimal valueOf( double val)获取对象
public BigDecimal add( BigDecimal val)加法
public BigDecimal subtract(BigDecimal val)减法
public BigDecimal multiply(BigDecimal val)乘法
public BigDecimal divide(BigDecimal val)除法
public BigDecimal divide(BigDecimal val,精确几位,舍入模式)除法

public class BigDecimalTest {
	public static void main(String[] args) {
		
		//获取对象
		BigDecimal bd1 = BigDecimal.valueOf(10.0);
		BigDecimal bd2 = BigDecimal.valueOf(2.0);
		
		//1.加法
		BigDecimal bd3 = bd1.add(bd2);
		System.out.println(bd3); //12.0
		
		//2.减法
		BigDecimal bd4=bd1.subtract(bd2);
		System.out.println(bd4); //8.0
		
		//3.乘法
		BigDecimal bd5 = bd1.multiply(bd2);
		System.out.println(bd5); //20.0
		
		//4.除法
		BigDecimal bd6 = bd1.divide(bd2);
		System.out.println(bd6); // 5
		BigDecimal bd7 = BigDecimal.valueOf(4.0);
		BigDecimal bd8 =  bd1.divide(bd7);
		System.out.println(bd8); //2.5
		
		BigDecimal bd9 = BigDecimal.valueOf(3.0);
		//BigDecimal bd10 =  bd1.divide(bd9);
		//System.out.println(bd10); //报错! 除不尽!
		
		BigDecimal bd11 = bd1.divide(bd9, 2 , BigDecimal.ROUND_HALF_UP);
		System.out.println(bd11); //3.33
	}
}

2. BigDecimal的底层存储方式

十进制  =>   二进制 (正负号、小数点、整数)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hgngy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值