问题描述
- VS2013 c语言基础问题
-
int i;
float f;
f = 123.59;
i = 30;
printf("%f",f-i);
打印出来的结果是93.589996啊,怎么不是93.59
解决方案
因为浮点型的数据在计算机中的存储,不是很精确,只能保证一定的精度,当一个数学运算式中包含有不同精度的数时,类型会自动转换,你的程序中
有浮点型和整型数,整型会自动转换为浮点型,所以结果也是浮点 型的,你没有显示的指定要几位精度,所以结果只是个大概准确的数值
解决方案二:
i先被转成float型,变成0.3*10的2次方的的2进制形式,即0.01001......的1010次方,0.3不能被完全表示,因此失值
解决方案三:
把printf("%f",f-i);改成printf("%.2f",f-i);
解决方案四:
在你的f-i中,i是Int型会先被自动转换为float型进行计算
解决方案五:
float格式默认输出六位小数
解决方案六:
正如楼上所言,是整型和浮点数据存储问题,关于这样的问题就不应该在停留在数学符号上,而是数据在计算机上如何存储实现的~是计算机数据存储问题,所有的数据都会转会成门电路的空间上的逻辑组合和时间上的时序组合~都会用电平高低来表示逻辑01,来表达各种数据、各种信息~
时间: 2024-09-11 03:17:47