我正在写一个函数,它假设已将float“length”传递给它,然后显示一个类似于输出的计时器。浮点“长度”意味着在几分钟内。浮点值未被正确存储
当我运行它时,输出应该是:02:03:27:00。相反,它显示02:03:26:100,虽然技术上正确,但它是A)不是它应该如何显示和B)显示在某个地方有一个错误,可能会在未来导致不良结果。
用计算器手动检查后发现所有的数学都是合理的。然后,我评论了格式为零的部分,以查看是否导致错误并且问题仍然存在。然后,我在每次计算后都会放入printf,发现“length”设置为123.45时,它被存储为123.449997?
我不知道它是这样做的。而且因为我不知道这种情况或发生的方式,所以我不能为它写一个可靠的解决方案。
int main()
{
float length;
float working;
int hour;
int min;
int sec;
int centi_sec;
char hzero[2];
char mzero[2];
char szero[2];
char czero[2];
length=123.45;
working=floor(length);
working=(length-working)*60;
sec=floor(working);
working-=floor(working);
centi_sec=(working*100)+.5;
working=floor(length);
hour=floor((working/60));
min=working-(hour*60);
if(hour<10){
hzero[0]='0';
hzero[1]="";
}
else if(hour==0){
hzero[0]='0';
hzero[1]='0';
}
else{
hzero[0]="";
hzero[1]="";
}
if(min<10){
mzero[0]='0';
mzero[1]="";
}
else if(min==0){
mzero[0]='0';
mzero[1]='0';
}
else{
mzero[0]="";
mzero[1]="";
}
if(sec<10){
szero[0]='0';
szero[1]="";
}
else if(sec==0){
szero[0]='0';
szero[1]='0';
}
else{
szero[0]="";
szero[1]="";
}
if(centi_sec<10){
czero[0]='0';
czero[1]="";
}
else if(centi_sec==0){
czero[0]='0';
czero[1]='0';
}
else{
czero[0]="";
czero[1]="";
}
printf("%s%d:%s%d:%s%d:%s%d\n", hzero, hour, mzero, min, szero, sec, czero, centi_sec);
system("pause");
}
我也写一个简短的程序只是这是不是问题,因为我曾错过了完整的程序的东西的影响,它有同样的问题脸颊。
int main()
{
float length=123.45;
printf("%f\n", length);
system("pause");
}
P.S.当我使用printf来解决问题时,我发现printf正在搞乱零格式。没有太大的问题,因为当我删除它们时,格式化回到它应该如何。尽管如此,printf的格式化并没有任何意义。如果任何人也可以提供这个答案,这将不胜感激。
在此先感谢。
你有一个潜在的问题,因为'floor()'不返回'int'它返回'double'。也不是这个'hzero [0] =“”;'生成编译器警告? –
你有一个很大的非科学数据类型可以使用 – Drew