[英]Rounding has unexpected results in Java
當我運行以下代碼時,我感到很驚訝:
int x = (int)4.9f;
System.out.println(x);
為什么結果是4,而不是5?
這是因為您不是四舍五入,而是將浮點數轉換為整數。 強制轉換只是刪除小數部分。 如果要四舍五入,則必須使用
double x = 4.9f;
System.out.println(Math.round(x));
另外,如果要使用顯式的上舍入或下舍入,則應改用Math.ceil(x)
或Math.floor(x)
。
使用強制轉換只會截斷值,而不執行適當的舍入。 您可以使用Math.round來獲取正確的舍入值,或者使用BigDecimal來選擇8種不同的舍入模式。
使用(int)4.9f
,它將僅截斷十進制值( (int)4.9f
入!)。 對於四舍五入,您需要使用Math.round()
函數。
您正在使用int,並且int不能保留小數,因為您正在將浮點數轉換為int,因此它會刪除小數點后的數字。
int x = (int)4.9f;
System.out.println(x);
所以用
double x = 4.9f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.