提问人:Oxygen033 提问时间:11/25/2022 更新时间:11/27/2022 访问量:46
将数组转换为以 0.x (C) 开头的数字
Convert the array to a number starting with 0.x (C)
问:
我有一个函数,可以将输入数字的小数部分转换为另一个数字系统(不是最漂亮的代码):
void FracToAny(double D, int q, int t)
{
double b[10] = {0};
for (int i = 1; i < t; i++)
{
double DP = D * q;
D = modf(DP, &b[i]);
if (D == 0)
{
break;
}
D = DP - b[i];
}
for (int i = 0; i < t; i++)
{
if (q == 16)
{
switch ((int)b[i])
{
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
default:
printf("%d", (int)b[i]);
break;
}
}
}
}
结果,我得到了一个 double 数组,它是生成的小数部分的逐个字符表示。但是,我想以“0.result”的形式从函数中返回此值。我该怎么做?
最好不要使用联合或动态内存分配(我已经看到他们试图找到问题的解决方案)。我想让它尽可能简单。
答:
0赞
Andrew
11/27/2022
#1
我认为这就是您要做的(请参阅我上面的评论):
Mac_3.2.57$cat etFract.c
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
double D;
int t = 3;
double b[10] = {0};
D = (3 * 16*16*16 + 4 * 16*16 + 5 *16)/(16*16*16.0);
printf("translating %f...\n", D);
for(i = 0; i < t; i++){
b[i] = modf(D, &D);
if(D == 0){
break;
}
D = b[i] * 16;
}
printf("0.");
for(int i = 0; i < t; i++){
switch((int)b[i]*16){
case 10:
printf("A\n");
break;
case 11:
printf("B\n");
break;
case 12:
printf("C\n");
break;
case 13:
printf("D\n");
break;
case 14:
printf("E\n");
break;
case 15:
printf("F\n");
break;
default:
printf("%d", (int)(b[i]*16));
break;
}
}
printf("\n");
return(0);
}
Mac_3.2.57$cc etFract.c
Mac_3.2.57$./a.out
translating 3.269531...
0.450
Mac_3.2.57$
评论
i
FracToAny
switch
printf
'\0'