基本Java:判断double是否为整数的方法

时间:2013-04-13 16:06:28

标签: java int double isinteger

我是一名初学程序员,我需要一个方法来返回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而不进行比较?

提前致谢!

5 个答案:

答案 0 :(得分:2)

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与最接近的整数的接近程度,并具有某种容差。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

将其与Integer.MAX_VALUE进行比较。如果它更小 - 它将适合整数,假设它没有分数。

答案 3 :(得分:0)

要存储较大的数字,您必须使用long。至于比较,您可以改为num == Math.round(num)

答案 4 :(得分:0)

我想,这会比Math.round()更好用,因为它避免了类型提升:

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

这有效,如果使用“整数”,则不是指实际类型“int”,而是“小数点后没有位置的数字”。