我宣布变量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写入字符串,然后编写一个子程序来去除尾随零,但必须有一个更简单的方法。
答案 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);