簡體   English   中英

Math.ceil 和 Math.floor 返回相同的值

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

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