将求反的double强制转换为int

Casting a negated double to int

本文关键字:转换 int double      更新时间:2023-10-16

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

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

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

我在时间戳中看到了值的差异。第一个似乎给了我有意义的结果。

当我刚做的时候:

int timestamp = -getSecondsSinceNow()*1000;

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

这里将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;

所以是的,这是有区别的。

这两种方法都不可靠,因为您将64位的双精度转换为32位的整数。您将丢失信息。