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,这又是为什么呢?
非常感谢!满意追加分 展开
我发现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,这又是为什么呢?
非常感谢!满意追加分 展开
6个回答
展开全部
因为float和Double内存中保存不一样
如你定义为doule类型
代码应该这样写:
doule a , b ;
scanf("%lf", &a);
b = a;
printf("%lf", b);
如你定义为doule类型
代码应该这样写:
doule a , b ;
scanf("%lf", &a);
b = a;
printf("%lf", b);
追问
我记得昨天晚上一开始我用的就是%lf,但是上来就出现了垃圾值
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
科学计数法:将一个数字表示成
(a×10的n次幂的形式),其中1≤|a|<10,n表示整数,这种记数方法叫科学记数法。
还有一个就是你对%2.2e理解错了
第一个2是宽度
第二个2是精度,指的是小数点后位数
(a×10的n次幂的形式),其中1≤|a|<10,n表示整数,这种记数方法叫科学记数法。
还有一个就是你对%2.2e理解错了
第一个2是宽度
第二个2是精度,指的是小数点后位数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是科学计数法的规定、
把一个绝对值大于10(或者小于1)的整数记为a×10^n的形式(其中1≤/a/<10),这种记数法叫做科学记数法.
1≤/a/<10
就表示他只能表示为1.20e+003
把一个绝对值大于10(或者小于1)的整数记为a×10^n的形式(其中1≤/a/<10),这种记数法叫做科学记数法.
1≤/a/<10
就表示他只能表示为1.20e+003
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么要那么写,要常规写法,不要玩花俏。
浮点数没有精确的,比较时利用差的绝对值和0的关系即可。
浮点数没有精确的,比较时利用差的绝对值和0的关系即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询