int main () {
float hour, dec, Dec_Only, min2, sec;
int res, r, min, whole, min3, sec2, sec3;
printf ("Enter hours: ");
scanf ("%f", &hour);
//Displaying initial minutes
min = hour * 60;
printf ("%d minutes\n", min);
if (hour == 0.0){
res = min / 60;
r = min % 60;
printf("%02d : %02d : 00", res, r);
}
else {
//Getting hours
whole = (int)hour;
dec = (hour - whole) * 100;
//Getting minutes
Dec_Only = hour - whole;
min2 = Dec_Only * 60;
min3 = (int)min2;
//Getting seconds
sec = min2 - min3;
sec2 = sec * 60;
sec3 = (int)sec2;
printf ("%02d : %02d : %02d", whole, min3, sec3 );
}
return 0;
}
你好,我是 C 语言新手。我的工作是将时间转换为数字时钟(其中需要使用条件语句)。 当 user_input 仅包含 1 位或更多小数时,我添加了条件语句。我的代码可以工作,但是,当我输入特定数字 5.2 时,问题就出现了。
输入时间(user_input):5.2 输出:05:11:59
我想要的输出:05:12:00
PS:当我输入任何其他数字时它会起作用。
关键问题是输入
"5.2"
会得到 float
near,但不完全是 5.2。这是因为 float
被编码为有限整数乘以 2 的幂。
不要使用
min = hour * 60
(将 截断的值分配给 min
),而是使用 min = lroundf(hour * 60);
(来自 <math.h>
)将 float
乘积四舍五入到最接近的 long
。