什么单一格式字符串可用于打印 0.0, 1.0, 0.025 ?例如给定:
float vals[3] = { 0.0f, 1f, 0.025f };
for(int i=0; i < 3; i++)
printf("%g\n", vals[i]);
所需的输出:
0.0
1.0
0.025
而是得到:
0
1
0.025
尝试了各种宽度说明符和 %f vs %g 但无法得到我想要的。
如果有一个 c++ 替代方案就可以了。
什么单一格式字符串可用于打印 0.0, 1.0, 0.025 ?例如给定:
float vals[3] = { 0.0f, 1f, 0.025f };
for(int i=0; i < 3; i++)
printf("%g\n", vals[i]);
所需的输出:
0.0
1.0
0.025
而是得到:
0
1
0.025
尝试了各种宽度说明符和 %f vs %g 但无法得到我想要的。
如果有一个 c++ 替代方案就可以了。
您可以使用 setprecision(int n),其中 n 是要输出的小数位数。除非您使用固定符号,否则不会显示任何尾随零
#include <iostream>
#include <iomanip>
float vals[3] = { 0.0f, 1.0f, 0.025f };
std::cout << setprecision(5);
for(int i=0; i < 3; i++)
std::cout << vals[i];
输出
0.0
1.0
0.025
将以下内容更改为固定符号
cout << setprecision(5) << fixed;
输出
0.00000
1.00000
0.02500
编辑:还有科学记数法,你可以弄清楚它的作用。setprecision() ---> std::setprecision()
您可以在打印时指定浮点数和双精度数的小数位后的精度。这是通过格式说明符完成的,例如: %.Nf 其中 N 是一个正整数。因此,如果您使用:
printf("%.3f\n", vals[i]);
你的输出是:
0.000
1.000
0.025
但是你不能让它完全按照你声明的方式打印。您必须在循环的不同阶段更改精度(前 2 次迭代为 %.1f,最后一次迭代为 %.3f)。printf 有很多选项,包括前导空格:
http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html
编辑:
因此,如果您想按照评论中的说明打印至少 1 个小数位,您可以为该情况添加一个明确的检查:
#include <math.h>
#include <stdio.h>
int
main(int argc, char *argv[]) {
float vals[3] = { 0.0f, 1.0f, 0.025f };
for(int i=0; i < 3; i++) {
if( fmod(vals[i],1) == 0) printf("%.1f\n", vals[i]);
else printf("%f\n", vals[i]);
}
return 1;
}
输出:
0.0
1.0
0.025000
您可以使用 * 告诉 printf 精度将来自 int 参数值。
printf("%.*f\n", (vals[i] == (int)vals[i]) ? 1 : 3 ,vals[i]);
应该打印:
0.0
1.0
0.025