[英]Math.ceil and Math.floor returning same value
我有一個雙 (23.46)
並使用方法 Math.ceil 和 Math.floor 並將我的 double 解析為這些方法,我得到返回給我的相同值,即 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
- 我沒有檢查 - 但這肯定不是這里的情況。)
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
代碼
System.out.println(Math.ceil(23.46));
System.out.println(Math.floor(23.46));
給我以下輸出:
24.0
23.0
所以它按預期工作。
我跑的時候
System.out.println(Math.ceil(23.46));
System.out.println(Math.ceil(15.01));
我明白了
24.0
16.0
這不是你想要的嗎?
你是如何進行實際調用的? 我無法使用double對象或基本類型復制結果。
這段代碼:
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
int num1 ,num2;
Scanner scan = new Scanner(System.in);
num1 = scan.nextInt();
num2 = scan.nextInt();
int result = num1 / num2;
System.out.println("floor "+num1+" / "+num2+" = "+Math.floor(result));
System.out.println("ceil "+num1+" / "+num2+" = "+Math.ceil(result));
System.out.println("round "+num1+" / "+num2+" = "+Math.round(result));
在我的情況下,我正在划分 int 然后應用 ceil ,它返回了像上面這樣的奇怪結果。
例如
Math.ceil(5/2) // gives 2
Math.floor(5/2) // gives 2
解決方法是在除法時使用 double,始終嘗試在除法中轉換為 double/float
Math.ceil(5/(double)2) // gives 3
Math.floor(5/(double)2) // gives 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.