printf加倍而没有尾随零

时间:2016-06-21 09:50:06

标签: c printf

我宣布变量double MyDouble;

如果我然后设置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写入字符串,然后编写一个子程序来去除尾随零,但必须有一个更简单的方法。

2 个答案:

答案 0 :(得分:1)

g转换说明符的精度控制最大有效位数(参见C.2011§7.21.6.1¶4)。精度由小数点后面的数字指定。看来你想要9位数。所以,试试:

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

答案 1 :(得分:0)

您可以尝试这样做,以避免尾随zero

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