C语言中浮点数的问题

昨天想做一个可以计算95%酒精配75%酒精所需毫升数的小程序,结果意外发现一个问题,所以来问一下。我发现float,double,longdouble这三个类型在处理同一... 昨天想做一个可以计算95%酒精配75%酒精所需毫升数的小程序,结果意外发现一个问题,所以来问一下。
我发现float, double, long double这三个类型在处理同一个数时出现了不同的结果。
于是用一个很简单的方法测试了一下
#include <stdio.h>
int main (void)
{
float a , b ;
scanf("%f", &a);
b = a;
printf("%f", b);

return 0;
}
问题是,假设我总是输入2.0,当第4行的类型声明为float时,可以正常把a的值赋给b,输出2.000000,但是将第4行的类型修改为double 或 long double时,都会输出一个负的垃圾值,这是为什么?
另外,如果在第4行声明时给a和b进行初始化为零,当类型为float时,依然能正常输出,但是当类型为double, long double时,不论输入什么,总是输出0.000000,这又是为什么呢?
非常感谢!满意追加分
展开
 我来答
神璐
2013-09-21 · 超过16用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:34.9万
展开全部
int scanf( const char *format, ... );
scanf("%d,%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2

如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0

如果遇到错误或遇到end of file,返回值为EOF。

且返回值为int型.

你试试看是否是返回值为1。
星语nfKI6
推荐于2017-11-26 · TA获得超过164个赞
知道小有建树答主
回答量:197
采纳率:100%
帮助的人:113万
展开全部
因为float和Double内存中保存不一样
如你定义为doule类型
代码应该这样写:
doule a , b ;
scanf("%lf", &a);
b = a;
printf("%lf", b);
追问
我记得昨天晚上一开始我用的就是%lf,但是上来就出现了垃圾值
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
练溪熊紫丝
2020-03-13 · TA获得超过1079个赞
知道小有建树答主
回答量:1217
采纳率:100%
帮助的人:5.5万
展开全部
科学计数法:将一个数字表示成
(a×10的n次幂的形式),其中1≤|a|<10,n表示整数,这种记数方法叫科学记数法。
还有一个就是你对%2.2e理解错了
第一个2是宽度
第二个2是精度,指的是小数点后位数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大胤宇靖荷
2019-04-03 · TA获得超过1130个赞
知道小有建树答主
回答量:1179
采纳率:0%
帮助的人:5.7万
展开全部
这是科学计数法的规定、
把一个绝对值大于10(或者小于1)的整数记为a×10^n的形式(其中1≤/a/<10),这种记数法叫做科学记数法.
1≤/a/<10
就表示他只能表示为1.20e+003
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刀郁念吹
2019-03-30 · TA获得超过1186个赞
知道小有建树答主
回答量:1253
采纳率:95%
帮助的人:5.7万
展开全部
为什么要那么写,要常规写法,不要玩花俏。
浮点数没有精确的,比较时利用差的绝对值和0的关系即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式