在 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]);
编辑和解决方案:
我在问完这个问题后才意识到: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]);