在 Objective-C 中转换相同的代码会给出另一个数值结果

Casting the same code in Objective-C gives another numerical result

编辑和解决方案:

我在问完这个问题后才意识到:Xcode 自动将我的代码更改为 NSLog 中的 (long) !这就是我得到不同结果的原因!


Swift

let nowMillis = 1000 * self.timeIntervalSince1970
print(nowMillis)

nowMillis 是:1461865916801.75

Objective-C

double nowMillis = 1000 * [self timeIntervalSince1970];
NSLog([NSString stringWithFormat:@"%ld", (long)nowMillis]);

nowMillis 是:-2147483648

self 在这两种情况下都是 NSDate *now = [[NSDate alloc] init];

问题不在于代码产生了不同的结果,而是您以不同的方式打印它。您的 Objective-C 尝试将 double 转换为 long,但值溢出。

如果不经过转换就打印出来,应该会得到相同的结果:

double nowMillis = 1000 * [self timeIntervalSince1970];
NSLog([NSString stringWithFormat:@"%f", nowMillis]);