C语言整型浮点型混合运算截断问题

整型浮点型混合运算的截断问题及处理

  • 整型运算赋值给浮点型
  • 整型浮点型混合运算后赋值给浮点型

1. 整型运算赋值给浮点型

(1) 情况处理和结论:
  1. 整形强制转换运算后赋值给浮点型

    ​ 结论 : 不会截断

  2. 整形乘100后直接除以整形后赋值给浮点型

    ​ 结论:输出截断,乘100相当于保留两位小数后放大100倍,乘1000相当于保留三位小数

  3. 整形乘1.0f除以整形乘1.0f后赋值给浮点型

    ​ 结论:不会截断,效果等同于(1)

(2) 代码验证
#include <stdio.h>

int main()
{
    
    
	int intera = 0;
	int interb = 0;
	
	float floata = 0.0f;
	float floatb = 0.0f;
	
	int intera = 0;
	int interb = 0;
	
	float floata = 0.0f;
	float floatb = 0.0f;
	
	printf("input intera : "); 
	scanf("%d",&intera);
	printf("input interb : "); 
	scanf("%d",&interb);
	printf("input floata : "); 
	scanf("%f",&floata);
	printf("\n\n"); 
	
	//1.整形强制转换运算后赋值给浮点型 
	floatb = (float)intera/(float)interb;
	printf("整形强制转换运算后赋值给浮点型:\n");
	printf("floatb = (float)%d/(float)%d\n",intera,interb);	
	printf("floatb = %f \n\n", floatb);
	//输出 : 10/3 = 3.333333 
	//结论 : 不会截断 
	
	//2.整形乘100后直接除以整形后赋值给浮点型 
	floatb = 100*intera/interb;	
	printf("整形乘100后直接除以整形后赋值给浮点型 :\n");
	printf("floatb = 100*%d/%d\n",intera,interb);	
	printf("floatb = %f \n\n", floatb);
	//输出:100*10/3 = 333.000000
	//结论:输出截断,乘100相当于保留两位小数 

	//3.整形1.0f除以整形1.0f后赋值给浮点型 
	floatb = (intera*1.0f)/(interb*1.0f);	
	printf("整形1.0f除以整形1.0f后赋值给浮点型:\n");
	printf("floatb = (%d*1.0f)/(%d*1.0f)\n",intera,interb);	
	printf("floatb = %f \n\n", floatb);
	//输出:(10*1.0)/(10*1.0) = 3.333333
	//结论:不会截断,等同于(1)


	return 0;
}

output:

2. 整型浮点型混合运算后赋值给浮点型

(1) 情况和结论:
  1. 整形浮点型混合运算后赋值给浮点型:浮点型除以整型

    ​ 结论 : 不会截断

  2. 整形浮点型混合运算后赋值给浮点型:整型除以浮点型

    ​ 结论 : 不会截断

	//整形浮点型混合运算后赋值给浮点型1
	floatb = floata/interb;
	printf("整形浮点型混合运算后赋值给浮点型1:\n");
	printf("floatb = %f/%d\n",floata,interb);	
	printf("floatb = %f \n\n", floatb);
	//输出 : 13.6/3 = 4.533333 
	//结论 : 不会截断 

	//整形浮点型混合运算后赋值给浮点型2
	floatb = interb/floata;
	printf("整形浮点型混合运算后赋值给浮点型2:\n");
	printf("floatb = %d/%f\n",interb,floata);	
	printf("floatb = %f \n\n", floatb);
	//输出 : 3/13.6 =  0.220588
	//结论 : 不会截断 

output:

3. 总结:

以上所有情况的处理基本都不会引起截断问题,根据需求使用一种方法用就行了。

但是,同一个项目最好就只使用一种方法处理,尽量避免多种方式混合使用,不是担心程序处理出错,而是避免编写的时候的一些粗心导致不可预知的bug出现而难以定位到错误。

猜你喜欢

转载自blog.csdn.net/weixin_45636061/article/details/118226168