将一个否定的双精度转换为int

时间:2011-05-30 11:47:24

标签: c++ objective-c c

以下代码段之间有区别吗?

double doubleMillis = -getSecondsSinceNow()*100; // returns double
int timestamp = (int) doubleMillis;

int timestamp = (int) -getSecondsSinceNow()*1000;

我看到时间戳中的值有所不同。第一个似乎给了我有意义的结果。

当我这样做时:

int timestamp = -getSecondsSinceNow()*1000;

我得到的结果与第一种方法相似。

2 个答案:

答案 0 :(得分:3)

这里你将getSecondsSinceNow()(double)的返回值强制转换为int并将其乘以1000:

int timestamp = (int) -getSecondsSinceNow()*1000;

这就像:

int timestamp = ((int) -getSecondsSinceNow())*(1000);

在下面的情况下,你会得到完整的结果:

明确地说:

double doubleMillis = -getSecondsSinceNow()*1000;
int timestamp = (int) doubleMillis;

曾经含蓄地说:

int timestamp = -getSecondsSinceNow()*1000;

所以是的,有区别。

答案 1 :(得分:1)

这两种方法都不可靠,因为您正在将一个64位转换为32位整数。你将失去信息。