加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Double to Int,没有任何有损精度

发布时间:2020-12-15 08:27:17 所属栏目:Java 来源:网络整理
导读:以下声明给出了编译时错误“错误:(19,13) java:不兼容类型:可能从double转换为int的有损转换” int i1 = 10.0;// Error:(19,14) java: incompatible types: possible lossy conversion from double to int 问题1 我理解错误,但编译器可以不推断 – 在这种
以下声明给出了编译时错误“错误:(19,13) java:不兼容类型:可能从double转换为int的有损转换”

int i1 = 10.0;

// Error:(19,14) java: incompatible types: possible lossy conversion from double to int

问题1

我理解错误,但编译器可以不推断 – 在这种特殊情况下 – 不会有精度损失?

问题2

如果我显式地将double转换为int然后它编译很好(甚至不是警告),即使我在这个例子中肯定会失去精度

int i2 = (int)9999999999999.999999999;

如果我无法编译第一种情况 – 没有发生丢失 – 那么为什么第二个显式转换示例甚至不会生成编译器警告?

解决方法

回答问题1

根据编译器的精度损失,因为编译器只看到左边有一个int变量,右边有一个double值.编译器不是那么聪明,以至于在转换为int时10.0不会失去精度.

理论上可以构建编译器以允许编译该语句,但这样做没有实际好处.几乎没有人写int x = 10.0.

回答问题2

实际上,精度有所下降,但为什么编译器不抱怨?因为你使用了演员.你写了(int).这是您向编译器显示您知道自己在做什么.通过编写演员表,你告诉它你知道可能会失去精确度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读