正确选择数据类型

在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;

不过还是建议使用显示转换,利于程序可读性以及以后错误检查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值