java - Double to Int 无损精度

标签 java casting compiler-errors

下面的声明给我一个编译时错误“错误:(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/

相关文章:

java - NFS 共享文件访问问题

java - Java 中未经检查的强制转换警告

php - 关闭编译器执行中的PHP错误

java - JMF 和 RTP 协议(protocol)

java - css 按钮图像未与 id 和样式类一起加载

c++ - 使用 dynamic_cast : what happenes to the allocated memory 强制转换后删除指针

c - 在 C 中 printf() 中将 int 类型转换为 char

c++ - 如何使概念失败并显示自定义错误消息(C++ 20)

compiler-errors - 为 FFMPEG 编译 libvpx 时出现编译错误

java - 使用正确的 DST 将 UTC java.sql.Time 转换为 java.time.localtime