代码之家  ›  专栏  ›  技术社区  ›  Jordan Savage

如何不断检查计算出的数字是否为整数?

  •  -2
  • Jordan Savage  · 技术社区  · 7 年前

    d 直到它成为整数,如果它不是整数,则将一个数字增加1,如果是,则返回整数。我已经试过了,但我一直得到作为整数返回的浮点数。(例如,19.4将返回为19,但我只想继续计算,直到得到一个整数)。我尝试了以下代码:

    int calcD(int tn, int e){
        int z;
        float d;
        z = 1;
        while (true){
            d = (1+(z*tn))/e;
            if (fmodf(d, 1)!= 0){
                z++;
            }else{
                break;
            }
        } 
        return d;
    }
    

    谢谢你的帮助!

    2 回复  |  直到 6 年前
        1
  •  2
  •   David Schwartz    7 年前

    你的问题是如何判断除法的结果是否为整数。这意味着检查分子是否是分母的倍数。这很简单——找到最接近的乘数,将分母乘以它,然后看看你是否得到了分子。

    因此:

    while (true){
        num = 1 + (z * tn);
        d = num / e;
        if (d * e != num)
            z++;
        }else{
            break;
        }
    
        2
  •  0
  •   Charles Srstka    7 年前

    只需将值与四舍五入时得到的值进行比较。

    float f = ...
    float precision = 0.00001;
    
    if (fabsf(f - roundf(f)) < precision) {
        printf("integer\n");
    } else {
        printf("not integer\n");
    }