这个问题已被提出,但我找不到令人满意的答案。
我需要在不知道它是什么的情况下获得双精度数字,并且零可以在任何地方。
例如,如果它是12.00032110,我需要得到数字11(带点和最后计数零)
我尝试将它们转换为字符串来获取它们的长度,但为此我需要事先知道它们的长度,因为我需要指定一个精度。如果我选择"%。5f"然后所有这些都将在点后有5位数,因此我无法获得原始长度。如果我选择"%f"所有较长的都被截断了,我无法得到原来的长度。
这是什么解决方案?我一整天都在寻找答案,但没有成功。
答案 0 :(得分:2)
您可以尝试查找在转换为十进制浮点数时产生数字的最短字符串。下面的函数通过以更高的精度重复写入和扫描来执行此操作(假设您提供了足够长的char缓冲区):
char *strfloat(char buf[], int n, double d)
{
int p;
for (p = 0; p < 20; p++) {
double x;
if (snprintf(buf, n, "%.*g", p, d) >= n) break;;
sscanf(buf, "%lf", &x);
if (x == d) break;
}
return buf;
}
您的长度是缓冲区保存的字符串的strlen
。但是,你永远不会得到带有尾随零的小数。