printf double,可用宽度最大精度

时间:2017-01-04 15:14:35

标签: c printf double precision

我需要在C中打印双倍,宽度为20,但使用可以在20个字符中打印的最大精度

例如:

-123.123456789123456789 

应该打印出来:

-123.1234567891234568

到目前为止,我有以下代码可以使用,但是很难看并且有问题:

double num = .......;
int pr = 0;
char temp[32] = { 0 };
char *point = NULL;
sprintf(temp, "%.20f", num);
point = strchr(temp, '.');
if (point) {
    pr = 20 - (1 + point - temp);
}
printf("%20.*f", pr, num);

问题是这不适用于%g而不是%f,它有时打印超过20个字符,即使没有指数部分存在。 当给出类似0.000123456789123456789的数字时出现问题。小数点后的额外零点似乎不算数(!)。

1 个答案:

答案 0 :(得分:1)

根据chux和此answer的一些提示,我实施了以下似乎有效的解决方案。 我不再尝试预先计算要使用的正确精度,而是以足够的精度打印,然后我裁剪多余的数字。

div.style