有人可以解释/链接任何可以区分
的文档可能丢失精度错误
和
有损转换。
我无法理解在什么情况下会发生什么错误。 任何有关示例的解释都深表赞赏
答案 0 :(得分:1)
不同之处在于被切断的数字的结尾:
有损转换返回最低有效位。它在JLS Sec 5.1.3中描述:
有符号整数到整数类型T的缩小转换只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关幅度的信息之外数值,这可能导致结果值的符号与输入值的符号不同。
类似于将int转换为字节:在这种情况下,您只需获得8个最低有效位:
System.out.println((byte) 258); // 2
精度损失会返回最重要的位。它在JLS Sec 5.1.2中描述:
从int到float,或从long到float,或从long到double的扩展原语转换可能会导致精度损失 - 也就是说,结果可能会失去一些最不重要的价值的一部分。
就像在浮点数中存储一个int太大而无法准确表示
int i = (1 << 24) + 1;
float f = i;
System.out.println((int) f == i); // false, because precision is lost.
答案 1 :(得分:0)
当您尝试将double转换为int时,可能会丢失精度错误。您正在尝试将一个原语转换为另一个原语,但没有足够的空间,您可能会丢失一些字节。
double x = 10.5; // 8 bytes
int y = x; // 4 bytes ; raises compilation error
您应该查找基元documentation