给予双重命名的可变 sizeValuesizeValue 包含其他东西比0,什么是最有效的方式确定 sizeValue 包含的价值,是一个整数?

目前我在用

sizeValue%1==0

任何其他更快的方式?

有帮助吗?

解决方案

给一个尝试 Math.ceil

private static boolean isInt(double x) {
     return x == Math.ceil(x);
}

修改

我已经做了一些基准使用以下方法:

private static boolean isInt1(double x) {
    return x == (int) x;
}

private static boolean isInt2(double x) {
    return x == Math.ceil(x);
}

private static boolean isInt3(double x) {
    return x % 1 == 0;
} 

isInt1是他们的更快(在sunjre 1.6)

其他提示

我不知道这是否是任何更快,但你可以投你double到int和测试平等:

double d = 123.456;
boolean dIsAnInteger = (d == (int)d);

警告:你会考虑 0.9999999999999999 一整数?大概不会。但是看这个:

double val = 0;
for(int i=0;i<10;i++)
    System.out.println(val+=0.1);

这个打印出:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

这是有问题的,因为在程序结束 val 含有什么,你认为应该整数,但是没有的。

所以我会让我的方法慢一点(但更正)通过集成一个三角喜欢 JUnit 不:

private static boolean isInt(double x, double delta) {
    double ceil = Math.ceil(x);
    return x-delta<ceil && x+delta>ceil;
}

当然,提供相同的方法有一个明智的默认:

private static boolean isInt(double x) {
    return isInt(x, 0.000000001);
}

现在 isInt(val) 最后返回正确的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top