这里应该怎么取整和取小数部分啊
发布网友
发布时间:2022-04-13 17:47
我来回答
共3个回答
热心网友
时间:2022-04-13 19:16
楼主,你有个根本性的错误,去一个数的整数和小数部分,不能用浮点数去求,用它肯定是错误的,原因就是你要记住浮点数只是精确表示,不是准确表示。
例如:你输入3456.90.
按照你的思路:它可能输出整数部分是3456,小数部分89.所以你看结果还不是准确的。
要实现你说的,如果要准确抽取,必须用字符串表示你输入的带有小数点的数字,然后根据小数点位置,分别提取整数部分,和小数部分。
这才是提取整数和小数部分的正确思想。
如果你需要程序的话,下面是根据我上面说的思想写的。
你输入一个小数,它显示整数部分和小数部分。
#include <stdio.h>
int main(void)
{
char num[20];
int zs=0;//整数部分
int xs=0;//小数部分
int i,flag=1;
scanf("%s",num);
for(i=0;num[i]!='\0';i++)
{
if(num[i]=='.')
flag=0;
else
if(flag==1)
{
zs*=10;
zs+=(num[i]-'0');
}
else
{
xs*=10;
xs+=(num[i]-'0');
}
}
printf("整数部分:%d\n",zs);
printf("小数部分:%d\n",xs);
return 0;
}
如上
例如你输入:56.789
显示结果
整数部分:56
小数部分:789
有问题可以hi我。
热心网友
时间:2022-04-13 20:34
转换没问题,输出出了问题。应该输出dollars[0]-dollars[4];
不应该输出dollars[5],而你的程序是。
int main(void)
{
int i;
float amounts[5];
long dollars[5],cents[5];
for(i=0;i<5;i++)
{
printf("Please import 5 numbers:");
scanf("%f",&amounts[i]);
dollars[i]=int(amounts[i]);
cents[i]=long((amounts[i]-(int(amounts[i])))*100);
}
for(i=0;i<5;i++)
printf("$%ld. %ld\n ",dollars[i],cents[i]);
return 0;
}
热心网友
时间:2022-04-13 22:09
错误分析:
scanf("%f",amounts[i]); ??!!
应该改成scanf("%f",&amounts[i]);
自己看看scanf的函数定义
scanf(格式控制,地址表列)
int scanf(char *format[,argument,...]);
“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。
#include <stdio.h>
int main(void)
{
int i;
float amounts[5];
long dollars[5],cents[5];
for(i=0;i<5;i++)
{
printf("Please import 5 numbers:");
scanf("%f",&amounts[i]);
dollars[i]=int(amounts[i]);
cents[i]=long((amounts[i]-(int(amounts[i])))*100);
printf("$%ld.%ld\n",dollars[i],cents[i]);
}
return 0;
}