位宽
格式化输出%mi中的m就是位宽
//默认情况下位宽是右对齐,如果需要输入的类型宽度不够,会在左边补空格
int num = 999;
printf("正数位宽:%5d\n", num);
//如果在位宽改为负值,就会改变位宽的对齐方式为左对齐,如果需要输入的类型宽度不够,会在右边补空格
printf("负数位宽:%-5d\n", num);
//注意:如果指定了位宽,但是输出的内容超出了宽度,会按照实际的宽度来输出
printf("小于实际宽度的位宽:%2d\n", num);
//可以在位宽前面加上0,如果输出的内容宽度不够会用0替补,如果宽度已经够了,那么就输出实际宽度
printf("不足位宽补0:%05d\n", num);
输出结果如下
正数位宽: 999
负数位宽:999
小于实际宽度的位宽:999
不足位宽补0:00999
- 保留位数
- %f默认会保留6位小数
- 指定保留多少位小数:%.nf,其中n就是需要保留多少位小数,f用于输出实型
float fValue = 3.14;
printf("%f\n", fValue);
printf("%.3f\n", fValue);
输出结果如下:
3.140000
3.140
实型输出的问题
- %f的各种坑
- 超出指定保留位之后的数据不对,因为float类型有效位数是7位
- 如何计算有效位?从第一个数开始计算
- 如果输出的数据超出了有效位数,就会出现一些垃圾数据
//如果输出的数据超出了有效位数,就会出现一些垃圾数据
float floatValue = 3.141596254847;
printf("单精度类型数据:%.10f\n", floatValue);
//如果想完整的输出,那么必须将数据保存为double类型,因为double类型的有效位是15位
double doubleValue = 3.141596254847;
printf("双精度类型数据:%.10f\n", doubleValue);
输出结果如下:
单精度类型数据:3.1415963173
双精度类型数据:3.1415962548
使用通配符占位
- 指定保留多少位小数时,可以通过*号占位,以后赋值具体保留的小数位
float fv = 3.1415926;
int count = 5;
printf("%.*f\n", count, fv);
输出结果如下:
3.14159
网友评论