以下代码段之间有区别吗?
double doubleMillis = -getSecondsSinceNow()*100; // returns double
int timestamp = (int) doubleMillis;
和
int timestamp = (int) -getSecondsSinceNow()*1000;
我看到时间戳中的值有所不同。第一个似乎给了我有意义的结果。
当我这样做时:
int timestamp = -getSecondsSinceNow()*1000;
我得到的结果与第一种方法相似。
答案 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位整数。你将失去信息。