我正在寫一個函數,它假設已將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