[英]Loss of precision in java
在Java中,所有整数文字均被视为int,而在Java中,浮点文字则被视为double。 那为什么
byte b =10;
没有给出任何错误,但是
float f = 10.0;
在两种情况下都进行向下转换时,会导致精度误差损失?
对于int
到byte
的情况,不必担心精度损失,因为这两种类型的粒度相同。 如果尝试将值转换为byte
到byte
范围之外的文字,则会出现错误。 (在这种情况下给出的错误消息会引起误解。)
如果使用double
float
,则可以有一个在正确范围内的常数值,但仍然会失去精度 。 在10.0的特定情况下,该值可以完全用float
和double
,但通常情况并非如此。
例如,考虑一下:
float f = (float) 10.1; // Or float f = 10.1f;
double d = 10.1;
System.out.println(f == d); // Prints false
这是因为在从double
到float
的转换中精度下降了-两种类型都不能精确表示10.1,但是double
比float
接近它。 ==
运算符将意味着f
转换为double
,而d
值不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.