gpt4 book ai didi

C - 获取 double 字的位数

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:11 25 4
gpt4 key购买 nike

有人问过这个问题,但我找不到满意的答案。

我需要在不知道它是什么的情况下获取 double 的位数,零可以在任何地方。

例如,如果是12.00032110,我需要得到数字11(带点,最后算零)

我尝试将它们转换为字符串以获得它们的长度,但为此我需要事先知道它们的长度,因为我需要指定精度。如果我使用“%.5f”,那么它们在点后都会有 5 位数字,因此我无法获得它们的原始长度。如果我使用“%f”,所有较长的都将被截断,并且我无法获得它们的原始长度。

解决这个问题的方法是什么?我整天都在寻找答案,但没有成功。

最佳答案

您可以尝试找到在转换为十进制 float 时将产生您的数字的最短字符串。下面的函数通过以更高的精度重复写入和扫描来执行此操作(前提是您提供了足够长的字符缓冲区):

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。不过,您永远不会得到尾随零的小数。

关于C - 获取 double 字的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com