繁体   English   中英

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

[英]Splitting a double into an array in 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做到这一点很简单(只是int i=0; while(num>0) numarr[size-++i] = num%10, num/=10;其中size预定为位数的数量),但是显然不能用于浮点数/双精度数,因为您无法修改一个浮点数。

是的,尽管没有使用浮点数部分,但我仍需要使用浮点数/双精度数(这是一种练习)。

而且我已经弄清楚了如何使用floor()确定双精度位数。

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

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

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

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;
...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM