代码之家  ›  专栏  ›  技术社区  ›  Shaun Mundi

在Java中,最快最有效的确定十进制值的方法是整数

  •  8
  • Shaun Mundi  · 技术社区  · 15 年前

    sizeValue sizeValue 包含除0以外的内容,确定该内容的最有效方法是什么 sizeValue

    目前我正在使用

    sizeValue%1==0

    还有其他更快的方法吗?

    3 回复  |  直到 15 年前
        1
  •  6
  •   dfa    15 年前

    试一试 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上)

        2
  •  3
  •   akf    15 年前

    double d = 123.456;
    boolean dIsAnInteger = (d == (int)d);
    
        3
  •  1
  •   cherouvim    14 年前

    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 包含您认为应该是整数但不是整数的内容。

    因此,通过集成类似于delta的 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)