单精度与双精度

单精度与双精度

%lf 与%f:单精度与双精度

学习c语言,在进行实验练习时遇到了单双精度的问题,在这里和大家分享下。
问题

计算某市出租车收费标准下的收费,因为收费标准多样,现定:车费=起步价+超出起步的里程数*单价

代码

#include<stdio.h>
#include<stdlib.h>
int main(){
	double BasicPrice,UnitPrice;//BasicPride是起步价,UnitPrice是单价
	float Basicmile,allmile;//Basicmile是起步的里程数,allmile表示总里程数
	float money;//money表示最后收费
	printf("请依次输入 起步价 单价 起步的里程数 总里程数:");
	scanf("%lf %lf %f %f",&BasicPrice,&UnitPrice,&Basicmile,&allmile);
	money=BasicPrice+UnitPrice*(allmile-Basicmile);
	printf("收费%lf",money);
	system("pause");
	return 0;
}

大家请注意

double BasicPrice,UnitPrice;
float Basicmile,allmile;

这里有两种不同的变量doublefloat,当我们在进行数据接收时需要注意类型的匹配
这里进行正确和错误类型的示范:
正确

scanf("%lf %lf %f %f",&BasicPrice,&UnitPrice,&Basicmile,&allmile);

错误1

定义变量双精度,却只接收变量单精度

scanf("%f %f %f %f",&BasicPrice,&UnitPrice,&Basicmile,&allmile);

此时会出现数据错误
乱码
我们进一步测试,打印BasicPrice和UnitPrice:
在这里插入图片描述
可见这两个变量里面并不是我们输入的数字
这是因为在输入函数scanf中接收的是%f也就是单精度类型(通常是6位有效数字),但是一开始BasicPrice和UnitPrice被定义为双精度类型(通常是15或16位),一些数位未被覆盖到
就像涂色块游戏,在定义变量时就被赋予了地址,不过里面的值是随机的,它有自己的底色
在这里插入图片描述
但是因为你的颜料不够(只接收了6位有效数字)没涂满,原来的一些颜色没被覆盖:
在这里插入图片描述
所以输出就会呈现乱码状

错误2

定义了单精度,却接收了双精度

scanf("%lf %lf %lf %lf",&BasicPrice,&UnitPrice,&Basicmile,&allmile);

在这里插入图片描述
显示变量周围的堆栈已损坏,为什么呢?
还是因为尺寸不匹配啊,原来的float存储大小不够接受double大小,就只能写到周围的地方啦

总结

  • 写代码的时候注意数据类型的匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫本初阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值