代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken Stephen Chung

在C语言中将双精度数拆分为数组

c
  •  0
  • Aaron Yodaiken Stephen Chung  · 技术社区  · 14 年前

    我想用以下代码:

    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
    

    我知道用ints做这件事很简单 int i=0; while(num>0) numarr[size-++i] = num%10, num/=10; 其中,大小被预先确定为数字中的位数),但这显然不适用于浮点/双精度浮点,因为您不能修改一个浮点。

    是的,我需要使用浮点/双精度,尽管不使用浮点部分(这是一个练习)。

    我已经知道如何使用floor()来确定双精度数。

    /* n > 0, n=floor(n) */
    int numdigits(double n){
        int i = 0;
        while (n >0)
            n = floor(n/10), i++;
        return i;
    }
    
    3 回复  |  直到 6 年前
        1
  •  6
  •   Jerry Coffin    14 年前

    仰望 fmod . 数字的位数可能更容易用 log10 .

        2
  •  2
  •   Michael Mrozek    14 年前

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

    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;
    ...
    
        3
  •  0
  •   Clifford    14 年前

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