2008-11-18 30 views
4

在C#中,如果我想將double(1.71472)轉換爲int,那麼我將得到答案2.如果我使用intValue()方法在Java中執行此操作,我得到1作爲答案。將Double轉換爲Int時的不同答案 - Java與.Net

Java是否會降低轉換?

爲什麼在Java API文檔具有即

返回指定 數爲int值約爲其類,信息很少。這可能涉及到 四捨五入或截斷。

有關舍入的更多信息會有幫助!

回答

13

當您使用轉換轉換時,Java從一個浮點型變爲一個整型時,向0調整爲零,並且C#也是如此。這是Convert.ToInt32舍入:

double d = 1.71472; 
int x = (int) d; // x = 1 
int y = Convert.ToInt32(d); // y = 2 

詳細信息可在Java Language Specification找到。需要注意的是,雖然在Number引用文檔離開選項打開的子類,在具體的拳擊類型的文檔,如Double,是明確的關於實施:

返回此Double的值作爲 INT(通過轉換成鍵入int)。

使用BigDecimal時,可以指定八種不同的舍入策略之一。

7

Java從一個浮點到一個整數類型縮小時,趨近於零。

有關於Java Language Specification中的一般規則的更多文檔。注意,儘管在Number文檔離開選項打開的子類,在具體的拳擊類型的文檔更清楚了:

返回此Double的值作爲 INT(通過強制轉換爲int類型)。

使用BigDecimal時,可以指定八種不同的舍入策略之一。

3

Jon Skeet是正確的,但要注意的是.NET使用Banker's Rounding作爲舍入算法。當你處於偶數整數之間的一半時。

+0

事實上,它比這更糟糕。 .NET在大多數情況下使用銀行家舍入,但不是全部(格式字符串是使用常見舍入的一種情況)。您還可以更改.NET 2.0及更高版本中使用的舍入方法。 – 2008-11-18 23:39:36