我有一個雙(23.46)Math.ceil和Math.floor返回相同的值
而且使用方法Math.ceil和Math.floor和解析我的雙重這些方法,我得到了相同的值返回我,這是23 ...
我希望它四捨五入到24 ..換句話說,如果我有一個雙15.01,它應該仍然是四捨五入到16 ...我該如何做到這一點?
我有一個雙(23.46)Math.ceil和Math.floor返回相同的值
而且使用方法Math.ceil和Math.floor和解析我的雙重這些方法,我得到了相同的值返回我,這是23 ...
我希望它四捨五入到24 ..換句話說,如果我有一個雙15.01,它應該仍然是四捨五入到16 ...我該如何做到這一點?
無法重現:
public class Test
{
public static void main(String[] args)
{
System.out.println(Math.ceil(23.46)); // Prints 24
System.out.println(Math.floor(23.46)); // Prints 23
}
}
我懷疑要麼你沒有得到你認爲你有或你沒有寫出你認爲你是輸出數據的輸入數據。 Math.floor
/ceil
自己工作正常。只有當輸入已經是整數時,他們纔會返回相同的值。你談論解析你的雙倍...我的猜測是,錯誤在那裏。請向我們展示一個簡短但完整的程序來演示問題。
(周圍可能有非常大的值等情況下,其確切的目標整數不能完全按照一個double
代表 - 我沒有檢查 - 但這裏肯定不是這樣的。)
「他們將返回相同的值的唯一時間是當輸入已經是一個整數」這最終成爲我的問題。愚蠢的錯誤在我身邊,謝謝你的幫助。 – Tiwaz89
當我運行
System.out.println(Math.ceil(23.46));
System.out.println(Math.ceil(15.01));
我得到
24.0
16.0
這不正是你想要的嗎?
代碼
System.out.println(Math.ceil(23.46));
System.out.println(Math.floor(23.46));
給我下面的輸出:
24.0
23.0
所以它按預期工作。
你如何做實際的調用?我無法複製你的結果,使用雙對象或原始類型。
此代碼:
Double d_object = new Double(23.46);
double d_simple = 23.46;
System.out.println("Ceiling simple: " + Math.ceil(d_simple));
System.out.println("Floor simple: " + Math.floor(d_simple));
System.out.println("Ceiling object: " + Math.ceil(d_object));
System.out.println("Floor object: " + Math.floor(d_object));
給我:
Ceiling simple: 24.0
Floor simple: 23.0
Ceiling object: 24.0
Floor object: 23.0
float x = ((float)2346/100); // You should type cast. Otherwise results 23
Math.ceil(x); // So Math.ceil(23) is 23 !!!
// Here I type cast to float.
// So I get the result 24
請發表你展示如何得到Math.ceil(23.46)= 23重現的代碼? – smci
與這個問題有些相關,如果double失去精度,ceil和floor可以打印相同的值,例如 System.out.println(「ceil:」+ Math.ceil((1000000000000000000L1)/2.0)); System.out.println(「floor:」+ Math.floor((10000000000000000000000 - 1)/ 2.0)); 都會給你5.0E17。 – Deep