[英]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.