鱼C论坛

 找回密码
 立即注册
查看: 1416|回复: 3

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

[复制链接]
发表于 2020-2-26 21:40:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a;
  5.         int b;
  6.         int c;
  7.         int d;
  8.         int n;
  9.         float k2;
  10.        
  11.         a = 10;
  12.         b = 50;
  13.         c = 20;
  14.         d = 30;
  15.         n = a + b + c + d;
  16.         k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));
  17.        
  18.         printf("K2 = %.3f",k2);
  19.        
  20.         return 0;
  21. }
复制代码
最佳答案
2020-2-26 22:49:15
本帖最后由 major_lyu 于 2020-2-26 22:50 编辑

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

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


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a;
  5.         int b;
  6.         int c;
  7.         int d;
  8.         int n;
  9.         float k2;
  10.         
  11.         a = 10;
  12.         b = 50;
  13.         c = 20;
  14.         d = 30;
  15.         n = a + b + c + d;
  16.         k2 = 1.0 * n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d)); //在前边加一个1.0*, 强制将后面的运算转换成浮点数运算就行了
  17.         
  18.         printf("K2 = %.3f",k2);
  19.         
  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-26 21:42:56 | 显示全部楼层
因为 a b c d n 全是整数啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 21:43:04 | 显示全部楼层
这样就行了:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float a;
  5.     float b;
  6.     float c;
  7.     float d;
  8.     float n;
  9.     float k2;

  10.     a = 10;
  11.     b = 50;
  12.     c = 20;
  13.     d = 30;
  14.     n = a + b + c + d;
  15.     k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));

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

  17.     return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 22:49:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 major_lyu 于 2020-2-26 22:50 编辑

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

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


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a;
  5.         int b;
  6.         int c;
  7.         int d;
  8.         int n;
  9.         float k2;
  10.         
  11.         a = 10;
  12.         b = 50;
  13.         c = 20;
  14.         d = 30;
  15.         n = a + b + c + d;
  16.         k2 = 1.0 * n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d)); //在前边加一个1.0*, 强制将后面的运算转换成浮点数运算就行了
  17.         
  18.         printf("K2 = %.3f",k2);
  19.         
  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-15 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表