[英]Floating Point Casting in Java
整数转换非常简单,多余的位就消失了。
但是,重要的是要了解在进行浮点运算的幕后到底发生了什么? 我试图阅读有关如何计算浮点数的信息,但是我还没有找到一个能很好解释这一点的信息。 至少那是我的借口。 尽管尾数的计算有些困难,但是我得到了基本的想法。
至少在Java 7之前,我知道不能在按位运算中使用浮点。 这是有道理的,因为它们是如何在内部存储的。 是否需要了解浮点如何工作或强制转换的任何重要信息?
因此,总结一下:
了解浮点数(如整数)的内部工作原理是否重要?
将浮点数转换为整数的内部过程是什么?
将浮点数转换为整数的内部过程是什么?
Java调用符合IEEE-754标准的机器代码指令。 Java并没有做任何事情。 如果您想知道铸造的工作方式,建议您阅读标准。
基本上,尾数会随着指数和所施加的符号而移动。 也就是说,浮点数是符号* 2 ^指数*尾数,它所做的只是执行此计算,然后计算掉和小数部分。
首先,您需要了解浮点数本质上是一个近似值。 您可以输入1.23,然后输入1.229998(或类似的值),因为精确地表示了1.23。 不管您是否要进行任何强制转换,都需要了解这一点,以及它如何影响计算(尤其是比较)。
从强制转换的角度来看,将float
转换为double
float
不会造成信息丢失,因为double
float
可以包含float
可以包含的每个值。 但是,从double
精度float
转换为float
会导致精度损失(对于很大或很小的数字,都会导致指数上溢/下溢),因为64位值中的信息仅比32位值中的信息多,因此某些数据在不断增加。最终“落在地板上”。
同样,从int
转换为double
不会导致信息丢失,因为double
可以包含int
可以包含的每个值,然后包含一些值。 但是从int
为float
或从long
为double
或float
可能会导致精度损失(尽管永远不会出现指数上溢/下溢)。
如果float
或double
值具有大的正指数或任何负的指数,则从float
或double
为int
或long
会很容易导致上溢/下溢和大量数据丢失。 而且,当然,当您从浮点数转换为固定数时,数字的小数部分会被截断(本质上是“ floor”运算)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.