gpt4 book ai didi

ios - 为什么将 52.0 作为 float 转换为 int 时变为 51?

转载 作者:行者123 更新时间:2023-11-28 18:35:39 25 4
gpt4 key购买 nike

我在 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)));

如果我 NSLog 它会得到 52.0。但是,如果我这样做:

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

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

最佳答案

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

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

关于ios - 为什么将 52.0 作为 float 转换为 int 时变为 51?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com