心鲜旅人 发表于 2020-2-26 21:40:37

写了一个独立性检验方程,可计算结果的小数都是0,为啥自己取整了呢?

代码如下
#include <stdio.h>

int main()
{
        int a;
        int b;
        int c;
        int d;
        int n;
        float k2;
       
        a = 10;
        b = 50;
        c = 20;
        d = 30;
        n = a + b + c + d;
        k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));
       
        printf("K2 = %.3f",k2);
       
        return 0;
}

zltzlt 发表于 2020-2-26 21:42:56

因为 a b c d n 全是整数啊

zltzlt 发表于 2020-2-26 21:43:04

这样就行了:

#include <stdio.h>

int main()
{
    float a;
    float b;
    float c;
    float d;
    float n;
    float k2;

    a = 10;
    b = 50;
    c = 20;
    d = 30;
    n = a + b + c + d;
    k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));

    printf("K2 = %.3f", k2);

    return 0;
}

major_lyu 发表于 2020-2-26 22:49:15

本帖最后由 major_lyu 于 2020-2-26 22:50 编辑

因为a,b,c,d,n都是整型数据,因此在计算看k2等号右边时是按照整型数据计算的,小数位已经被舍弃了。只是在赋值的时候进行了默认类型转换,所以小数位是0啊。

在等号后面的表示之前加一个1.0*,告诉编译表达式的计算采用浮点运算就可以了


#include <stdio.h>

int main()
{
      int a;
      int b;
      int c;
      int d;
      int n;
      float k2;
      
      a = 10;
      b = 50;
      c = 20;
      d = 30;
      n = a + b + c + d;
      k2 = 1.0 * n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d)); //在前边加一个1.0*, 强制将后面的运算转换成浮点数运算就行了
      
      printf("K2 = %.3f",k2);
      
      return 0;
}
页: [1]
查看完整版本: 写了一个独立性检验方程,可计算结果的小数都是0,为啥自己取整了呢?