0

我在 Objective-C 中有以下代码将秒数(int)转换为“x 小时 y 分钟 z 秒”形式的日期字符串。对于 8812 秒,它应该返回 2 小时 26 分 52 秒,但它返回的是 2 小时 26 分 51 秒。

这是麻烦的行:

float timeInSeconds = (60 * ((((seconds / 3600.0) - (seconds / 3600)) * 60.0) - (int)(((seconds / 3600.0) - (seconds / 3600)) * 60.0)));

如果我这样做,这将导致 52.0 NSLog。但是,如果我这样做:

int timeInSeconds = (int)(60 * ((((seconds / 3600.0) - (seconds / 3600)) * 60.0) - (int)(((seconds / 3600.0) - (seconds / 3600)) * 60.0)));

我得到51 NSLog。为什么会这样?

4

1 回答 1

5

以下代码在不使用浮点数的情况下将时间间隔转换为小时/分钟/秒,因此没有舍入问题或精度损失:

int numberOfSeconds = 8812; // Your value as an example

int tmp = numberOfSeconds; 
int seconds = tmp % 60;
tmp /= 60;
int minutes = tmp % 60;
tmp /= 60;
int hours = tmp;

NSLog(@"%d:%02d:%02d", hours, minutes, seconds);
// Output: 2:26:52
于 2013-10-29T22:24:39.440 回答