c语言域宽与精度

float x=12.345;
printf("x=%10.2e",x);/*输出结果:x=_1.23e+001*/
printf("x=%2E",x);/*输出结果:x=1.234500E+001*/
上面的两种输出结果为什么是那样格式输出?

首先知道%e是按科学记数法输出值(%E同%e),1.23e+001的意思是1.23*10^1,+表示正号,对比一下这几个输出:

#include<stdio.h>
void main()
{
float x=12.34;
printf("1.x=%e\n",x);   //1.直接按科学计数法表示:1.234*10^1
printf("2.x=%10.2f\n",x); //2.按单精度浮点型输出,按10位的宽度输出,小数点后保留2位,多出的位数前边默认补空格
printf("3.x=%010.2f\n",x);//3.按单精度浮点型输出,按10位的宽度输出,小数点后保留2位,多出的位数前边补0
printf("4.x=%10.2e 数一下,包括空格在内一共10位,小数点后保留2位\n",x); //4.按科学计数法输出,按10位的宽度输出,小数点后保留2位,多出的位数前边默认补空格
printf("5.x=%2f\n",x);   //5.按单精度浮点型输出, 按2位的宽度输出,若x的长度不足2,则左补空格,大于2保持正常输出,这里显然x的宽度大于2了,故直接按单精度浮点型输出
printf("6.x=%2E\n",x);   //6.同5,只是按科学计数法输出
}

运行结果比对一下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-10
10.2的.2就是小数点后有两位,没有则默认是小数点后保留六位追问

但是答案的输出就是上面的输出啊?

追答

是的呀,2e没有说小数点后保留几位,默认就是6位

追问

但是人家答案_1.23e+001

追答

那个不是10.2e的输出结果吗?.2就是要保留两位小数

追问

前面空一格后面又多了个加,加不能省略吗?为什么多了个空格?

追答

这个还没研究过,呵呵

追问

那后面的那种为什么是那样子的

追答

http://zhidao.baidu.com/link?url=JeYaHBPhRG_s8QcPanqqHnHfeNd5pG3FTH5tiOKIVjAA8BleUl8TfQtVNzt3LvztwaA59c5OdTp0S_x6yKLk7q
好好看看吧

相似回答