在进行详细讲解之前,先看看数值类型之间的合法转换:
从图中我们可以看出存储占用字节少的类型向存储占用字节多的类型转化不会丢失精度(实线),而存储占用字节多的类型向存储占用字节少的类型(包括占用字节一样的类型)转换都可能发生精度丢失(虚线),那么为什么会造成精度丢失呢?看下面例子。
就拿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就会认为这个值的大小是离这个点最近的点所对应的值,精度丢失也由此而来。
2。int无法表示float值(int会将该值认为是最大或最小值):
其它类型转换时产生的精度丢失原理和这一样,就不一一介绍了。
本文发布于:2024-02-01 10:50:38,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675583836095.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |