下面的声明给我一个编译时错误“错误:(19, 13) java:不兼容的类型:从 double 到整数的可能有损转换”
int i1 = 10.0;
// Error:(19, 14) java: incompatible types: possible lossy conversion from double to int
问题一
我理解这个错误,但编译器能否不推断 - 在这种特殊情况下 - 不会有精度损失?
问题二
如果我明确地将 double 转换为 int
那么它编译得很好(甚至没有警告),即使我在这个例子中肯定会失去精度
int i2 = (int)9999999999999.999999999;
如果我无法编译第一种情况 - 没有发生损失 - 那么为什么带有显式转换的第二个示例甚至不生成编译器警告?
最佳答案
理论上,编译器可以推断 #1 中的特定示例实际上不会根据字面量的值降低精度,但正如您所见 - 它不会。
显式强制转换向编译器发出信号,表明您知道正在处理它的情况,因此代码实际上可以编译。然而,大多数 IDE 也可以配置为在这种情况下发出警告。
关于java - Double to Int 无损精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246561/