2013-02-12 65 views
0

我不知道爲什麼,但我得到兩個不同的結果,如果我將參數從小數改爲小數。Java奇怪的細胞轉換

這些方法將返回確切的值。我試圖向上舍入的數字。如果它是一個小數,例如:

0.0 - > 0

0.1 - > 1

0.4 - > 1

0.5 - > 1

0.6 - > 1

1.0 - > 1

1.1 - > 2

// accepts Double 
private void myRound(Double d){ 
    int res = (int)Math.ceil(d); 
    return (res <= 0 ? 1 : res); 
} 

// acepts int 
private void myRound(int i){ 
    int res = (int)Math.ceil(i); 
    return (res <= 0 ? 1 : res); 
} 

實施例:

System.out.println(myRound(14/10)); 

OUTPUT:1

System.out.println(myRound(1.4); 

OUTPUT:2

+1

您輸出的示例與您的示例代碼不匹配(並非最不重要的原因是您永遠不會調用myRound)。 – 2013-02-12 15:07:05

+0

您可以用'Math.max(i,1)'替換int的版本,因爲int的上限是int本身。 – 2013-02-12 15:10:22

+0

我想你的代碼實際上是這樣的:System.out.println(myRound(1.4));不是嗎? – 2013-02-12 15:10:34

回答

5

事情是,首先轉換到Integer,其中(14/10)是1,然後它將它上移到1. 1.4是一個雙精度值,所以它使它成爲一個雙精度值。

+3

更具體地說:14/10是*精確* 1.不是1.0,而是1.將14或10轉換爲浮點或雙精度(在它們之後加上'd'或'f',或' .0「爲雙)使得1.4的結果可以預期(或者至少足夠接近)。 – 2013-02-12 15:08:00

+0

不只是可以,它**是**的原因。 – 2013-02-12 15:08:29

+0

@MichaelMyers,是的,我的壞。它是1. – user 2013-02-12 15:08:57

3

14/10,因爲你寫它,是1,因爲這兩個1410int,這樣結果是int

你列出的輸出結果與你的代碼不匹配(不僅僅是因爲你所展示的代碼從來不會調用myRound),但我懷疑這將是你實際看到的任何解釋。