java类型转换精度丢失

阅读: 评论:0

java类型转换精度丢失

java类型转换精度丢失

在进行详细讲解之前,先看看数值类型之间的合法转换:

    从图中我们可以看出存储占用字节少的类型向存储占用字节多的类型转化不会丢失精度(实线),而存储占用字节多的类型向存储占用字节少的类型(包括占用字节一样的类型)转换都可能发生精度丢失(虚线),那么为什么会造成精度丢失呢?看下面例子。

直接转换引起的精度丢失

就拿int转换float来解释吧:我们知道int是4个字节32位,其格式为:

它的取值范围:-231~231-1;
虽然float也是4个字节32位,但格式和int不一样。其格式为:

它的取值范围:-3.40282347E+38F~3.40282347E+38F,具体点可以在一个坐标上体现:

从图中可以看出当float越靠近两端时,可以表示的数值就越稀疏。当稀疏到一定程度时,float将不能表示int类型的值,即将int转换成float类型时,可以会和int类型表示的值存在偏差,就像上图中所示,float中没有该int数值对应的值时,float就会认为这个值的大小是离这个点最近的点所对应的值,精度丢失也由此而来。

强制转换引起的精度丢失

同样用int和float;为什么int可以直接转换成float,而float不能转换成int呢?这是因为float表示的数值范围要比int表示的多,也就是说float中有些数值是int无法表示的,所以float转换成int得强制转换。float转int精度丢失有两种情况:
1.int可以表示该float值(这和int转float精度丢失情况是一样的):


2。int无法表示float值(int会将该值认为是最大或最小值):


其它类型转换时产生的精度丢失原理和这一样,就不一一介绍了。

本文发布于:2024-02-01 10:50:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675583836095.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:精度   类型   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23