繁体   English   中英

Java中的浮点转换

[英]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可以包含的每个值,然后包含一些值。 但是从intfloat或从longdoublefloat可能会导致精度损失(尽管永远不会出现指数上溢/下溢)。

如果floatdouble值具有大的正指数或任何负的指数,则从floatdoubleintlong会很容易导致上溢/下溢和大量数据丢失。 而且,当然,当您从浮点数转换为固定数时,数字的小数部分会被截断(本质上是“ floor”运算)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM