Java 从长到浮点的可能有损转换

Java 从长到浮点的可能有损转换,java,android,Java,Android,我知道这是个愚蠢的问题。想知道代码是如何工作的 代码1: float a =123L; 在这里,即使数字123L是长类型(8字节)和浮点a(4字节),我也不认为编译时错误是“可能的有损转换” 代码2: long c=123.0D; 在这里,即使double和long类型是8字节,我仍然会得到“可能的有损转换”编译时错误 我认为存储在变量中的值应该是两种类型都兼容的。浮点数据类型表示非常接近的近似值,这取决于数字本身、系统、精度等。因此,如果将eg 340L转换为浮点,它可能表示为339.99

我知道这是个愚蠢的问题。想知道代码是如何工作的

代码1:

float a =123L;
在这里,即使数字123L是长类型(8字节)和浮点a(4字节),我也不认为编译时错误是“可能的有损转换”

代码2:

long c=123.0D;
在这里,即使double和long类型是8字节,我仍然会得到“可能的有损转换”编译时错误


我认为存储在变量中的值应该是两种类型都兼容的。

浮点数据类型表示非常接近的近似值,这取决于数字本身、系统、精度等。因此,如果将eg 340L转换为浮点,它可能表示为339.999,而不是340


整数和浮点的表示方式完全不同,这就是为什么您会收到关于可能丢失精度的警告,因为整数表示的是一个精确的数字,而不是包含尾数的浮点。

欢迎使用堆栈溢出。请理解,在写一个新问题之前,你应该先做一些研究。尤其是。。。任何类型的“新手”问题。。。你可以很肯定,以前在这里被问过无数次。