C语言 双精度类型(double)变量的输入问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 双精度类型(double)变量的输入问题相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <conio.h>
int main()
int a;
char b;
float c;
double d=0;
char e[80];
printf("输入int类型:");
scanf("%d",&a);
printf("\n输出int类型:%d\n",a);
fflush(stdin);
printf("输入char类型:");
scanf("%c",&b);
printf("\n输出char类型:%c\n",b);
fflush(stdin);
printf("输入float类型:");
scanf("%f",&c);
printf("\n输出float类型:%f\n",c);
fflush(stdin);
printf("输入double类型:");
scanf("%e",&d);
printf("\n输出double类型:%e\n",d);
fflush(stdin);
printf("输入字符串:");
scanf("%s",e);
printf("\n输出字符串:%s",e);
return 0;
执行该程序时到输入double里出现问题;我在double中输入“4.0”,但输出的不是"4.0".怎么回事啊。望解惑。
单精度型和双精度型
指两种
类型
的
浮点数。
单精度型
即
float
型,
有效数字约10进制7位
双精度型
即
double
型,
有效数字约10进制15位
所以能描述的数值精度不同。
c语言
数据
用
ieee
754
国际标准。float
型
用
4
字节存放,double
型
用
8
字节存放。
single
precision
2进制:
数符1位,指数8
位,尾数
23
位
double
precision
2进制:
数符1位,指数11
位,尾数
52
位
单精数值范围:
±
~10的-44.85次方
到
约
10的38.53次方
双精度数值范围
±
~10的-323.3
次方
to
约
10的
308.3次方。
float
a=1.234567;
double
b=1.2345678901234;
-------------
10%3
整除取余数,得
1。
1
用
float
和
double
表示,精度没有区别。
a=(float)(10%3);
b=(double)(10%3);
强制转换
要带
小括号。 参考技术A scanf("%e",&d);e是以指数形式输出,可以使用%g来使计算机自动判断使用%e还是%f本回答被提问者采纳 参考技术B scanf("%lf",&d);
c语言中双精度浮点数(即double类型数据)的取值范围
c语言中双精度浮点数(即double类型数据)的取值范围,是怎么计算出来的?
双精度浮点数在计算机中的存储方式为:一位符号位 s
11位指数位 E(移码表示,范围为:e=-1024到1023)
52位小数位 f
共计64位,8个字节
所表示的规格数为:1.f * 2^e ,1.f 约等于2 (1.1111111111111111111...=2 )
能表示的最小数约等于 -2*2^1023=2^1024
能表示的最大负数约等于 -2*2^-1024=-2^-1023
能表示的最大数约等于 2*2^1023=2^1024
能表示的最小正数约等于 2*2^-1024=2^-1023
当然,另有规定全0时代表0
所以:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,
正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。 参考技术A 再推荐一个文章给你看,更详细的。认真读完,就知道了。要有耐心啊,比较长。
---
浮点数分为单精度(float)和双精度(double),根据IEEE754标准,float类型在计算机内部存储占4字节,double类型占8个字节。
无论是单精度还是双精度在存储中都分为三个部分:
符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分
float:符号 1 指数 8 尾数 23
double 符号1 指数 11 尾数 52
本回答被提问者和网友采纳
以上是关于C语言 双精度类型(double)变量的输入问题的主要内容,如果未能解决你的问题,请参考以下文章