Java 浮点到整型vs整型到浮点型自动转换

Java 浮点到整型vs整型到浮点型自动转换,java,Java,我正在学习Herbert Schildt的《java初学者》一书中的java。据说,作为一个兼容的命运变量,并且足够大以存储一个原始变量,自动转换就完成了 也就是说,Int应该能够存储浮点,反之亦然,因为它们都有4字节大小 public class MyClass { public static void main(String args[]) { int i = 10; float f = i; float ff = 10;

我正在学习Herbert Schildt的《java初学者》一书中的java。据说,作为一个兼容的命运变量,并且足够大以存储一个原始变量,自动转换就完成了

也就是说,Int应该能够存储浮点,反之亦然,因为它们都有4字节大小

public class MyClass {
    public static void main(String args[]) {
        int i = 10;
        float f = i;

        float ff = 10;
        int ii = ff; 
    }
}
但是,在编译时,这段代码会产生以下错误:

/MyClass.java:15: error: incompatible types: possible lossy conversion from float to int
        int ii = ff; 
                 ^
1 error
为什么作为一个兼容的类型,并且足够大,可以相互存储,浮点可以存储int,而int不能存储float

Int应该能够存储浮点,反之亦然,因为它们都有4字节大小

public class MyClass {
    public static void main(String args[]) {
        int i = 10;
        float f = i;

        float ff = 10;
        int ii = ff; 
    }
}

数据的大小不是重要的部分。而是关于可以存储在给定字节数中的值
int
只能存储介于-2^31和2^31-1之间的整数值。另一方面,
float
可以存储十进制值。

因为float也包含小数点后的数字,而int则不包含。如果没有这一点,您就不能通过显式地将浮点转换为int来简单地修剪数字的小数部分。

如果整数值在浮点可以存储的最大整数值范围内,则int-to-float决不是有损转换,因为值将始终存储/转换为
.0
类似
4
将存储为
4.0
。但在从float转换为int的情况下,分数值将丢失,所以JVM会给出这样的错误。如果您可以承担这种风险,那么您必须显式地将浮点值转换为int。

如您所见,您可以将
int
存储到
float
中,但不能将
float
放在
int

之所以会出现这种情况,是因为float的内部结构是一个十进制数,而int,顾名思义,是整数


有关更多信息,您可以查看有关的讨论。

由于主代码中未显示
ii
ff
,因此此问题可能会被否决。1234.5678如何存储为“int”?您可以建议我而不是insta downvoting。我用正确的代码编辑了主题。我在这里的目的是学习Java处理转换的方式,而不是简单地发布一个问题。如果你希望得到一个令你满意的答案,你必须问自己真正想知道的是什么(我没有否决你,因为你是新来的,这是惯例)。看起来,即使使用正确的代码,也没有人试图回答这个问题。当然,你不能读心术,但当你花时间经常去学习(而不是心灵感应)论坛,而且编辑是免费的,而且编辑速度很快,当你只能建议代码缺失时,没有理由释放下推。更确切地说,从
浮点
转换为
整数
会导致精度损失,这是信息的丢失。因此,您必须使用显式强制转换:
inti=(int)floatVariableint
->
float
和从
float
->
int
进行的两种转换都可能会丢失信息
int
->
float
这是一种潜在的精度损失,因为并非每个
int
都可以表示为
float
,例如值
2147483641
(float仅为24个有效位)
float
->
int
,除了分数微调导致的精度明显降低外,
int
不能表示float
可以表示的值的范围/大小。语言设计者认为范围的丢失比精度的丢失更严重,因此
float
->
int
不是隐式的,而
int
->
float
是隐式的。
int-to-float从来都不是有损转换
实际上,这不是真的,因为IEEE 754 32位浮点值只有24个有效值(尾数)位。因此必然会丢失信息(更精确地说,丢失精度),因为浮点不能以相同的精度表示所有的int值。可表示的数字中会有间隙,间隙会随着值的大小而增大。例如,int
2147483641
不能表示为浮点而不损失精度。
2147483641
周围的下两个可表示的int是
>2147483520
2147483647