【发布时间】:2021-11-15 11:46:22
【问题描述】:
从浮点到字节的显式类型转换如何在 Java 中工作,为什么最后一个输出也是 -1 而不是 0? 57 的第一个输出可能是由于算术溢出,所以加 1 会产生 58,这对我来说很有意义。但因此我希望最后一个输出为 0。
public class Typecasts {
public static void main(String[] args) {
float f = 12345.0f;
byte b = (byte) f;
System.out.println(b); // output: 57
b = (byte) (f + 1);
System.out.println(b); // output: 58
f = 12345678987654321.0f;
b = (byte) f;
System.out.println(b); // output: -1
b = (byte) (f + 1);
System.out.println(b); // output: -1
}
}
【问题讨论】:
-
这与转换为字节无关。
12345678987654321.0f的值太大了,以至于 1 太小而不能给它另一个值(即12345678987654321.0f == 12345678987654321.0f + 1是 true)。您需要添加 around1E9f以获得另一个值! .
标签: java casting integer-overflow