【问题标题】:Why is converting my float to an int making the number negative?为什么将我的浮点数转换为整数会使数字为负数?
【发布时间】:2013-11-26 17:56:56
【问题描述】:
NSTimeInterval expirationTime = (secondsSinceUnixEpoch*1000)+120000;
expirationTime = ceil(expirationTime/2);
int expirationInt = (int)expirationTime;
NSLog(@"%d", expirationInt);

日志输出始终为负数,即使在将其转换为 int 之前它是正数...我尝试将其乘以 -1 使其再次为正数,但它只是保持负数!我完全感到困惑....对C了解不多,我只是在做一些愚蠢的事情吗?

【问题讨论】:

  • 你考虑过溢出吗?
  • 你为什么要把它转换成int?为什么不将其保留为NSTimeInterval (double)?
  • 如果您确实需要整数类型,请尝试使用longlong long
  • 因为我需要它没有小数点。我将数字放入 URL 中。有没有比将小数部分转换为 int 更好的方法?
  • 我会努力的,谢谢!

标签: ios objective-c c int nstimeinterval


【解决方案1】:

(secondsSinceUnixEpoch*1000)+120000 的数字在我看来太大了,无法放入 int。整数有可能溢出并变为负数。

【讨论】:

    【解决方案2】:

    转换为long long 是一种解决方案。正如您在评论中所说,您希望显示一个整数以在 URL 中使用。只需这样做:

    NSTimeInterval expirationTime = (secondsSinceUnixEpoch*1000)+120000;
    expirationTime = ceil(expirationTime/2);
    NSString *urlString = [NSString stringWithFormat:@"http://example.com?time=%.0f", expirationTime];
    

    这会将十进制数格式化为整数。

    【讨论】:

    • 如此简单!肯特贝克“做最简单的事情可能会奏效”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多