我需要在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的数字时出现问题。小数点后的额外零点似乎不算数(!)。