簡體   English   中英

四舍五入在Java中產生意外結果

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM