我有一个浮点数组,其中数据以不同的小数点存储,所以有些是123.40000
, 123.45000
, 123.45600
...到底。这可能吗?如果是这样,怎么做?printf()
123.4
123.45
123.456
问问题
47774 次
4 回答
19
使用 %g 格式化程序:
printf( "%g", 123.4000 );
印刷
123.4
尾随零被删除,但不幸的是,如果小数部分为零,尾随小数点也是如此。我不知道是否真的有任何方法可以直接使用 printf() 来做你想做的事——我认为这样的事情可能是你最好的选择:
#include <stdio.h>
#include <math.h>
void print( FILE * f, double d ) {
if ( d - floor(d) == 0.0 ) {
fprintf( f, "%g.", d );
}
else {
fprintf( f, "%g", d );
}
}
int main() {
print( stdout, 12.0 );
print( stdout, 12.300 );
}
于 2009-12-07T23:26:17.193 回答
3
我不知道这有多hacky,但是:
float f = 124.000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
退货124.0
。
float f = 124.123000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
退货124.123
。
于 2009-12-08T00:04:50.313 回答
0
打印到(足够大的)缓冲区。打印缓冲区...如果缓冲区中没有'.'
,则打印一个点。
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
编辑
该标准指定了#
标志:
# 结果被转换为“另一种形式”。[...] 对于 a、A、e、E、f、F、g 和 G 转换,浮点数的转换结果始终包含小数点字符,即使它后面没有数字。[...] 对于 g 和 G 转换,不会从结果中删除尾随零。[...]
...但你得到尾随零:(
于 2009-12-08T00:43:47.150 回答
0
使用 %g --
以正态或指数表示法打印双精度数,以更适合其大小为准。“g”使用小写字母,“G”使用大写字母。这种类型与定点表示法略有不同,因为它不包括小数点右侧的微不足道的零。此外,整数不包括小数点。
于 2009-12-07T23:28:44.397 回答