java中的精度损失

时间:2015-07-06 05:40:25

标签: java type-conversion

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

    byte b =10;

不会给出任何错误,但

   float f = 10.0;
在两种情况下都会发生缩减,

会导致精度误差丢失?

1 个答案:

答案 0 :(得分:4)

对于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,但double接近float确实。 ==运算符将f转换回double,其值与d不同。