将小数转换为二进制后,我的输出显示的小数位数不超过6位。我需要小数点后12位 intmain(){ 长双十进制,二进制,分数=0.0,分数=0.1; 长整数双整数,双整数=0; 长整数系数=1,余数,温度,i; printf(“输入任何小数位数:”); scanf(“%Lf”、&fraDecimal); 二整数=十进制; D分数=十进制-二整数; while(二整数!=0){ 余数=二整数%2; 二次积分=二次积分+余数*整数因子; 二整数=二整数/2; intFactor=intFactor*10; } 对于(i=1;i

将小数转换为二进制后,我的输出显示的小数位数不超过6位。我需要小数点后12位 intmain(){ 长双十进制,二进制,分数=0.0,分数=0.1; 长整数双整数,双整数=0; 长整数系数=1,余数,温度,i; printf(“输入任何小数位数:”); scanf(“%Lf”、&fraDecimal); 二整数=十进制; D分数=十进制-二整数; while(二整数!=0){ 余数=二整数%2; 二次积分=二次积分+余数*整数因子; 二整数=二整数/2; intFactor=intFactor*10; } 对于(i=1;i,c,binary,decimal-point,C,Binary,Decimal Point,而不是: int main(){ long double fraDecimal,fraBinary,bFractional = 0.0,dFractional,fraFactor=0.1; long int dIntegral,bIntegral=0; long int intFactor=1,remainder,temp,i; printf("Enter any fractional decimal number: "); scanf("%Lf",&

而不是:

int main(){

    long double fraDecimal,fraBinary,bFractional = 0.0,dFractional,fraFactor=0.1;
    long int dIntegral,bIntegral=0;
    long int intFactor=1,remainder,temp,i;

    printf("Enter any fractional decimal number: ");
    scanf("%Lf",&fraDecimal);

    dIntegral = fraDecimal;
    dFractional =  fraDecimal - dIntegral;

    while(dIntegral!=0){
         remainder=dIntegral%2;
         bIntegral=bIntegral+remainder*intFactor;
         dIntegral=dIntegral/2;
         intFactor=intFactor*10;
    }

   for(i=1;i<=12;i++){

       dFractional = dFractional * 2;
       temp =  dFractional;

       bFractional = bFractional + fraFactor* temp;
       if(temp ==1)
             dFractional = dFractional - temp;

       fraFactor=fraFactor/10;
   }

   fraBinary =  bIntegral +  bFractional;
   printf("Equivalent binary value: %Lf",fraBinary);

   return 0;
}
试试这个:

printf("Equivalent binary value: %Lf",fraBinary);
还要注意的是,它并不总是正确显示最后一个数字。至少在我的机器上,
long double
是8个字节。这似乎将
long double
的精度推到了极限。果然,它指出

53位有效位精度为15到17位有效位 小数精度


请参考此项,您需要提及要打印为
%.[width]的小数点宽度f
示例:
%.4f
->这将打印4个小数点。对于程序没有正确显示最后一个数字的输入,您观察到的输出是什么,以及您希望正确的输出是什么?@EricPostPichil使用输入
44.44
,得到
101100.011000007
,预期
101100.0111100001010
。我想解决这个问题需要128位浮点,除非有更复杂的解决方法。谢谢,现在我发现问题是它们在“十进制”中累积“二进制”数字在二进制浮点格式中进行编号,他们将其推得太远。仅在字符串中累积字符会更简单。忘了提及,我已经尝试过%.12Lf,但当我这样做时,它会给我12位小数,但它不会计算任何内容。例如,如果我给输入4.404,则输出会变为0.000000000000y输入。
printf("Equivalent binary value: %.12Lf", fraBinary);