代码之家  ›  专栏  ›  技术社区  ›  Oliver Nikolovski

检查计算结果是整数还是小数

  •  2
  • Oliver Nikolovski  · 技术社区  · 7 年前

    Math.sqrt( 2 * Math.sqrt(m) + 1 / 4 ) - 1 / 2
    

    在函数中,m是类型的输入 long .
    我需要检查这个表达式的结果是整数还是小数,如果是整数,则返回结果,如果是小数,则返回-1。
    所以,我决定把结果放在一个 double :

    double n = Math.sqrt( 2 * Math.sqrt(m) + (double)1 / 4 ) - (double)1 / 2;
    

    • 使用模算子: 如果(n%1==0)

    • 或者使用数学。天花板和地板功能


    例如,当m=2084574945554272657时,结果应为53735.96813。。。
    但它是四舍五入的,实际上存储在n中的是53736.0,函数的答案是n是一个整数,这是不正确的。
    有什么方法可以正确检查结果吗?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Aaron Kübler    7 年前

    试试这个:

    double toCheck = 277.76;
    if((toCheck-(int)toCheck)!=0)
        System.out.println("decimal value");
    else
        System.out.println("integer value);
    
        2
  •  0
  •   Aleksandr    7 年前

    如果你需要精确性,我建议你使用 BigDecimal . 它对CPU方面的要求更高,因此需要在性能和精度之间进行选择。

        //Just an example, apply your formula here
        BigDecimal big = BigDecimal.valueOf(6.00);
        big = big.sqrt(MathContext.DECIMAL128);
    
        if (big.compareTo(big.setScale(0, RoundingMode.DOWN)) == 0) {
            return big.longValue();
        } else {
            return -1;
        }
    

    出于某种原因 .equals() .compareTo() 看起来效果不错。

        3
  •  -1
  •   fedeb    7 年前

    尝试添加。在每个常数的末尾为0,如1.0、4.0等等