将数组转换为以0.x开头的数字(C)

vpfxa7rd  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个函数,可以将输入数字的小数部分转换成另一个数字系统(不是最漂亮的代码):

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”的形式从函数返回这个值。我该怎么做呢?
最好不要使用联合或动态内存分配(我看到他们试图找到解决问题的方法)。

wpx232ag

wpx232ag1#

我认为这是你正在努力做的(见我上面的评论):

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$

相关问题