java中整型和浮点型运算中类型溢出,精度丢失的原因即解决方法

java中基本类型分为8中:分别为整型:byte,short,int(默认),long,浮点型:float,double(默认),字符型:char布尔类型:boolean。每种类型保存的数值都是有一定范围的。当超出这个范围就会产生类型溢出。

而在运算过程中会产生一系列的问题:例如转型。当我们设置的类型的存储范围不足以容纳所存储的值时,可以将类型转换为更大字节的类型。当超过了最大字节类型。就需要使用引用类型解决。

1.整形的类型溢出,产生原因及解决方法:
        1.产生原因:整形中,一个 int 型变量占 32 字节,能表示的数据范围为 -2³¹~2³¹-1 之间的整数,即十进制中 -2147483648 至 2147483647 之间的整数。当超出范围后,编译器会提示错误,这个错误即类型溢出,

2.解决方法:但是在以后的学习,工作中,我们难免会遇到更大的数值运算。系统为了更好的解决这个问题,提出大整型(BigInteger)。

注意:它是以字符串方式存放数值的。

3.BigInteger类型:定义方式,加减乘除方法,(加减乘除方法可直接连续调用)
        //大整数,引用类型,不能使用运算符,只能通过方法实现加减乘除
		//解决整形类型溢出
		//()存放字符串类型数据,因为数值类型无法表示更大的数
		BigInteger n1 = new BigInteger("134231232412233221");
		BigInteger n2 = new BigInteger("134231212414122332");
		//加法	
		BigInteger sum = n1.add(n2);
		System.out.println(sum);
		//减法
		BigInteger sub = n1.subtract(n2);
		System.out.println(sub);
		//乘法
		BigInteger  mul = n1.multiply(n2);
		System.out.println(mul);
		//除法
		BigInteger div = n1.divide(n2);
		System.out.println(div);

        比较方法:为compareTo(),观察其源码可知,当n1>n2时,返回1,相等时返回0,小于时返回-1.

        BigInteger n1 =new BigInteger("2147483648");//定义方式
		BigInteger n2 =new BigInteger("21474836499999999");//定义方式
		//比较大小
		int n = n1.compareTo(n2);

2.浮点型类型溢出及其精度丢失的产生原因及其解决方法:

        1.类型溢出的原因:同理,当产生范围超出后,就会出现类型溢出。

        2.精度丢失:什么叫精度丢失,即浮点型在计算过程中,小数部分会出现多或少的偏差,虽然微乎其微,但是在一些对数值要求严格的领域中,会产生影响。

产生的原因:在计算机中是以二进制保存的的,但是某些小数又无法通过具体的二进制保存,最终只能通过截取无限循环部分的保存。

        3.解决办法:针对浮点型,类型溢出及其精度丢失的问题,官方提出了更精确的大浮点型BigDecimal类,其与BigInteger在加减乘除,比较等使用方法相同。

但是在除法中,我们要小心无限循环的问题,系统为我们提供了不同的小数部分保留方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cph_507

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

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

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

打赏作者

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

抵扣说明:

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

余额充值