为什么52.0作为一个浮点数作为一个int转换为51?

Dou*_*ith 0 floating-point objective-c ios

我在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)));
Run Code Online (Sandbox Code Playgroud)

如果我这样,结果为52.0 NSLog.但是,如果我这样做:

int timeInSeconds = (int)(60 * ((((seconds / 3600.0) - (seconds / 3600)) * 60.0) - (int)(((seconds / 3600.0) - (seconds / 3600)) * 60.0)));
Run Code Online (Sandbox Code Playgroud)

我得到51 NSLog.为什么呢?

Mar*_*n R 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
Run Code Online (Sandbox Code Playgroud)