当前位置: 首页 > 知识库问答 >
问题:

Java:不兼容的类型,可能的从双精度型到浮点型的有损转换 [重复]

澹台俊达
2023-03-14

为什么当我尝试编译以下代码时会收到此错误消息

float a = 1/0.1;
System.out.println(a);

float b = 1/0.002;
System.out.println(b);

不兼容的类型:从double到float的可能有损转换

我溢出来了吗?我想了解这背后的理论。提前感谢。

共有2个答案

嵇光临
2023-03-14

< code>0.1和< code>0.002是< code >双精度文字。Java的< code>double类型比它的< code>float类型更精确。因此,当您将< code>double转换为< code>float时,可能会通过将数字舍入到可在< code>float中表示的最接近的值来更改数字。以十进制为例,将四位数的. 1234赋给两位数的类型会产生一个不同的数字. 12。

当您通过赋值到 float 变量隐式执行此转换时,编译器会告诉您可能会丢失信息。通过使用强制转换,您可以告诉编译器转换为不太精确的格式是有意为之。或者,通过使用浮点型文字(如 0.1f0.002f),可以始终使用浮点值并避免转换。

一般来说,选择一种类型,< code>float或< code>double,并在整个计算过程中使用它,包括文字和变量。

黄弘深
2023-03-14

使用浮点文字:

float a = 1f / 0.1f;
 类似资料: