java中int转float为何会产生精度损失

Java中的数值类型之间的转换

自己
(自己画的丑图)在图中黑色的线表示转化时不会损失精度,红色代表会出现精度损失。
在Java中:

  • int占用4个字节,取值范围在-2147 438 648~2147 483 647(刚好超过20亿)
  • float 占用4个字节,取值范围在-3.402 823 47E+38F~3.402 823 47E+38F
    单纯从取值范围,float的取值范围更大,因此这样看应该不丢失精度。但是我们看看下面的代码:
int n = 123456789;
float f =n;

运行结果是:1.23456792E8,从结果看很明显有精度的丢失,为何会如此这涉及到浮点数在计算机中的表示方式。

小数在计算机的表示方式

其实在计算中表示小数的方式有两种:定点表示和浮点表示。定点表示我就不介绍了,较为简单,容易产生溢出(想了解可以百度)。
浮点数 (自画丑图)
在这里插入图片描述
浮点数是由阶码j和尾数s两部分组成的。阶码是整数,阶符和阶码的位数m合起来反应浮点数的范围及小数点的实际位置;尾数是小数,其数位n反应了浮点数的精度;尾数的符号sf代表浮点数的正负。到这里大概了解了浮点数的在计算机在表示方式。
现在我们说回float,float是一个占用4个字节的浮点数:其中一位是符号位,8位指数位,23位尾数位。当指数位全部为0时省略的是0否则省略的是1;尾数23位加上省略的1位,float的精确度有24位。
而对于int而言它的精度时32位,尽管float的取值范围更大些,但是精度却不如int。这就解释了为什么int转化成float后可能出现精度损失。
最后想说,我画的图真心难看(大家可以查相关书籍,图更好看些),感谢包含。

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值