Я пишу функцию, которая, предположительно, должна иметь поплавковую длину, а затем отображать выходные данные таймера. Длина «поплавка» должна составлять минуты.Значение поплавка не сохраняется правильно
Когда я запускаю его, выход должен быть: 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