簡體   English   中英

基本Java:判斷double是否為整數的方法

[英]Basic Java: Method to tell if a double is an integer

我是一個初學程序員,我需要一個方法來返回double是否為整數。 當數字太大而無法容納int時,會出現問題。

這就是我所擁有的:

private static boolean isInteger(double n){
    int ni = (int) n;
    double nd = (double) ni;
    if (nd==n)
        return true;
    return false;
}

我說我像143215890634.0一樣投入。 它將返回false,因為int無法存儲那么多位數。

如何允許int(或另一個類)存儲更多數字,或者有更好的方法來確定double是否為int而不進行比較?

提前致謝!

long保持比int更多的數字。 當你超出long的范圍時, 所有 double值都是整數(並且間隔超過1)。 所以你可以使用類似的東西:

private static boolean isInteger(double n) {
    if (n > (double) Long.MAX_VALUE ||  n < (double) Long.MIN_VALUE) {
        return true;
    }
    long asLong = (long) n;
    return n == (double) asLong;
}

有其他方法可以確定按位表示,並檢查指數 - 但它們會更復雜,至少要理解。

請注意,檢查二進制浮點中的精確值通常是個壞主意。 您可能希望檢查double與最接近的整數的接近程度,並具有某種容差。

嘗試

boolean isInteger(double d) {
    return d % 1 == 0;
}

將它與Integer.MAX_VALUE進行比較。 如果它更小 - 它將適合整數,假設它沒有分數。

要存儲較大的數字,您必須使用long 至於比較,你可以改為num == Math.round(num)

我想,這比Math.round()更好用,因為它避免了類型提升:

    double d1 = 143215890634.0, d2 = 143215890634.001;
    System.out.println(d1 == Math.floor(d1));
    System.out.println(d2 == Math.floor(d2));

這是有效的,如果使用“整數”,則不是指實際類型“int”,而是“小數點后沒有位置的數字”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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