我想要使用以下代码:
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;
}
答案 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。