您的位置:首页 > 其它

正确选择数据类型

2014-11-11 20:59 218 查看
在C语言编程时,必须正确选择计算过程中使用的变量类型。如果使用了错误的变量类型,程序很难检测出错误所在,同时也会造成计算结果与我们期望得到的结果有所偏差。举一个简单的例子。

/*****************************************************

函数功能:测试数据类型对处理结果的影响,以及使用

显示强制类型转换。

*****************************************************/

#include<stdio.h>

int main(void)

{

const float Revenue_Per_150=4.5f;//每150件商品售价

short JanSold=23500;//一月份售出商品

short FebSold=19300;//二月份售出商品

short MarSold=21600;//三月份售出商品

float RevQuarter=0.0f;//第一季度收益

long QuarterSold=JanSold+FebSold+MarSold;//第一季度售出商品总数

RevQuarter=QuarterSold/150*Revenue_Per_150;

printf("Stock sold in \n Jan: %d\n Feb: %d\n Mar: %d\n",JanSold,FebSold,MarSold);

printf("Total stock sold in first quarter: %ld\n",QuarterSold);

printf("Sales revenue this quarter if: $%.2f\n",RevQuarter);

return 0;

}

运行结果如下:



程序计算结果:1930.50,而通过实际的计算我们得到真正的结果应该是1932.00。那么问题来了,这中间相差的1.50跑哪儿去了?虽然这是一个很小的数据,但是差之毫厘谬以千里,这也会给我们造成很大的麻烦。

那么好,我们来看一下具体的处理过程:

在语句 RevQuarter=QuarterSold/150*Revenue_Per_150;中我们根据计算规则来一步一步分析。

首先计算QuarterSold/150,即64400/150,得到的结果是429.333,这里64400是长整型,150是整形,两个整形相除得到的结果是整数,所以小数点后面的数据去掉,得到结果429

第二步再计算乘法:429*Revenue_Per_150。这里Revenue_Per_150是浮点数,得到的最终结果也是浮点数1930.50。

这就是错误所在。

知道了错误怎么改正呢?其实很简单让式子以浮点数运算就可以了。

修改函数体内语句为:RevQuarter=(float)QuarterSold/150*Revenue_Per_150;

对第一步的计算进行强制数据转换即可。这时是显示转换。

运行结果为:



此时就得到我们期望的值了。消失的1.50已经找到。

其实在修改函数语句时也可以进行隐式转换,即:RevQuarter=QuarterSold/150.0f*Revenue_Per_150;

不过还是建议使用显示转换,利于程序可读性以及以后错误检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: