我用C语言创建了一个代码,用于查找长双数的小数点以外的总位数,这就是代码 -
#include <stdio.h>
int main(void)
{
long double number,temp; int num,count=0;
printf("\nEnter a number=");
scanf("%Lf",&number);
printf("\nEnter multiplication factor=");
scanf("%d",&num);
if(num>10)
{
printf("\nPlease enter a multiplicative factor <10");
return 1;
}
if(number>0)
{
for(int i=0;i<num;i++)
{
number=number*10;
temp=number-(int)number;
printf("\ntemp=%Lf\n",temp);
if(temp!=0)
{
count=count+1;
}
else
{
return 1;
}
}
printf("\nTotal number of decimal points=%d",++count);
}
else if (number<0)
{
number=(-1)*number;
for(int i=0;i<num;i++)
{
number=number*10;
temp=number-(int)number;
printf("\ntemp=%Lf\n",temp);
if(temp!=0)
{
count=count+1;
}
else
{
return 1;
}
}
printf("\nTotal number of decimal points=%d",++count);
}
else
{
printf("\nNumber has no decimal points\n");
}
}
我使用了可以通过示例理解的逻辑 -
如果number = 45.123
和倍增系数= 5
那么数= 45.123 * 10 = 451.23和temp = 451.23-451 = 0.23
= 451.23 * 10 = 4512.3,temp = 4512.3-4512 = 0.3
= 4512.3 * 10 = 45123,temp = 45123.0-45123 = 0.0
这就是程序应该终止的地方,因为我已经使用了返回1,但它没有按照这种方式工作,因为程序将数字乘以10乘以倍增因子。
这里是输出 -
aalpanigrahi@aalpanigrahi-HP-Pavilion-g4-Notebook-PC:~/Desktop/Daily programs$ ./decimal
Enter a number=45.123
Enter multiplication factor=5
temp=0.230000
temp=0.300000
temp=0.000000
temp=0.000000
temp=0.000000
Total number of decimal points=6
答案 0 :(得分:-2)
抱歉,我一开始误解了你的代码。 问题是你使用!=比较一个浮点数和一个int。你永远不应该这样做。尝试与
进行比较if(temp!=0.0f)
更好的是与非常小的数字进行比较:
if (temp<0.00000001f)
像这样:
if(number>0)
{
for(int i=0;i<num;i++)
{
number=number*10;
temp=number-(int)number;
printf("\ntemp=%Lf\n",temp);
if(temp<0.0000001f)
{
count=count+1;
}
else
{
return 1;
}
}
printf("\nTotal number of decimal points=%d",++count);
}