Java数据类型转换,浮点型溢出问题

Java数据类型转换问题

Java为强类型语言,低位可向高位转换

计算过程中的转换

隐式转换

计算过程中以高位为准,如int*long计算过程中会先把int转换成long类型,然后再参与运算

byte a = 4;
byte b = 100;
byte c = a + b;

计算过程中会自动转换成int进行计算,int转换成byte报错。

注意:会产生溢出,编译没有问题,但是结构是负数,在计算过程中两个int类型相乘结构还是int,溢出。

int count = 100000000;
int price = 1999;
long totalPrice = count * price;

转换过程中丢失精度

丢失精度问题主要体现在浮点数问题上面

double 共占64位,第一位为符号位置,11位指数位,52位小数位。

float共占为32位,同样第一位为符号位置,8位指数位置,23位小数位。

float f = 20014999;
double d = f;
double d2 = 20014999;
System.out.println("f=" + f);
System.out.println("d=" + d);
System.out.println("d2=" + d2);

结果为

f=2.0015E7

d=2.0015E7

d2=2.0014999E7

因为2001499转换成二进制表示:

Double:00000101110 011000101100111100101110000000000000000000000000000

Float:1001011100110001011001111001100

double为64位,后面表示小数位,刚好24位,余下补零,而float小数位占23位,不能表述全,只能四舍五入。

解决方案:通过类BigDecimal解决

强制类型转换

高位变低位,当高位数在低位范围内正常表示,超过范围就失去意义了变成负数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值