将小数转换为二进制后,我的输出显示的小数位数不超过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);