java 中的精度损失

Loss of precision in java

所有整数文字在 java 中都被视为 int,而浮点文字在 java 中被视为 double。 那为什么

    byte b =10;

没有给出任何错误但是

   float f = 10.0;

在两种情况下都发生向下转换时会导致精度损失错误?

intbyte 的情况下,没有真正担心 精度 的损失,因为这两种类型具有相同的粒度.如果您尝试将值在 byte 范围 之外的文字转换为 byte,则会出现错误。 (在那种情况下给出的错误消息有点误导。)

doublefloat的情况下,你可以有一个常量值在右边范围,但仍然失去精度。在您的 10.0 的特定情况下,该值可以在 floatdouble 中准确表示,但通常情况并非如此。

举个例子,考虑这个:

float f = (float) 10.1; // Or float f = 10.1f;
double d = 10.1;
System.out.println(f == d); // Prints false

这是因为在从 doublefloat 的转换中精度丢失了 - 两种类型都不能准确表示 10.1,但 doublefloat 更接近它做。 == 运算符意味着 f 被转换回 double,具有与 d.

不同的值