2016-06-21 51 views
-1

我声明变量double MyDouble;printf双尾无尾数

如果我然后设置MyDouble = 1000.0/3.0;然后 printf("%g", MyDouble);给出333.333,所以它失去了一些精度。

如果我使用printf("%lf", MyDouble);我会得到精度。

如果我现在设置MyDouble = 5.0/2.0;并使用printf("%lf", MyDouble);,我会得到2.500000,所以尾随零。

作为一般情况下,我怎么能没有尾随零的精度。我可以使用snprintf%lf格式将double写入一个字符串,然后编写一个子程序去除尾随的零,但必须有一种更简单的方法。

+1

链接到std :: printf的文件,包括格式说明:http://en.cppreference.com/w/cpp/io/c/fprintf –

+4

你要么需要那么多的精度或你不“T。 –

+1

'l'长度修饰符对'f'说明符没有影响。 – jxh

回答

0

你可以这样试试,以避免尾随zero

double a= 5.0; 
double b = 2.0; 
printf("%.2lf\n", a/b); 
1

g转换指定的精度控制显著位的最大数目(参照C.2011 § 7.21.6.1 ¶ 4)。精度由小数点后的数字指定。看来你需要9位有效数字。因此,尝试:

printf("%.9g", MyDouble); 
+0

[Ideone的演示。](http://ideone.com/X09o3i) – jxh

+0

谢谢jxh。这会给予%f说明符精度,但不会删除尾随零。 “%.17g”是我需要的,因为它将数字格式设置为最多17个字符(包括小数点,然后去掉不必要的零)。 – user1228123

+0

答案的意思是具有'g',正如我的第一句话所述。带'f'的代码是一个错字。 – jxh