将双精度分割为C中的数组

时间:2010-06-22 20:32:43

标签: c

我想要使用以下代码:

double num = 31415; /* num will never have a decimal part */
/* ... code here so that we can now say */
printf("%d", num_array[0] == 3 && num_array[1] == 1 && num_array[4] == 5); //1

我意识到使用整数执行此操作是微不足道的(仅int i=0; while(num>0) numarr[size-++i] = num%10, num/=10;,其中大小预先确定为数字中的位数),但这显然不适用于浮点数/双打,因为您不能mod one浮动。

是的,我需要使用浮点数/双打,尽管没有使用浮点部分(这是一个练习)。

我已经想出如何使用floor()来确定double中的位数。

/* n > 0, n=floor(n) */
int numdigits(double n){
    int i = 0;
    while (n >0)
        n = floor(n/10), i++;
    return i;
}

3 个答案:

答案 0 :(得分:6)

查找fmod。使用log10可能更容易计算位数。

答案 1 :(得分:2)

将它转换为字符串可能最简单:

char* str = malloc(num_digits+1);
snprintf(str, num_digits+1, "%f", num);

索引到str会将每个数字作为ASCII值,因此您需要减去'0'以获取实际数值:

str[0] - '0' == 3;
str[1] - '0' == 1;
str[2] - '0' == 4;
...

答案 2 :(得分:0)

除了fmod()之外,您还可以转换为int64_t或long long int,并像以前一样使用%。如果范围小于10位,则可以使用int32_t。