C++ 将否定双精度转换为int
以下代码段之间有区别吗C++ 将否定双精度转换为int,c++,objective-c,c,C++,Objective C,C,以下代码段之间有区别吗 double doubleMillis = -getSecondsSinceNow()*100; // returns double int timestamp = (int) doubleMillis; 及 我在时间戳中看到了不同的值。第一个似乎给了我有意义的结果 当我这么做的时候: int timestamp = -getSecondsSinceNow()*1000; 我得到的结果与第一种方法类似。这里您将getSecondsSinceNow()的返回值(doub
double doubleMillis = -getSecondsSinceNow()*100; // returns double
int timestamp = (int) doubleMillis;
及
我在时间戳中看到了不同的值。第一个似乎给了我有意义的结果
当我这么做的时候:
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;
是的,这是有区别的。这里您将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位整数。您将丢失信息。这两种方法都不可靠,因为您正在将64位的双精度浮点转换为32位整数。您将丢失信息。我意识到这一风险,我知道我的数据不会超过2^31。问题是我将double传递给另一个需要int的函数,因此我将不得不接受它。我意识到这一风险,我知道我的数据不会跨越2^31。问题是我将double传递给另一个需要int的函数,所以我不得不接受它。呵呵,所以优先级咬了我一口-DI自由地更新了答案,不依赖任何Objective-C材料。你的答案适用于任何“C”,当然,没问题,但你错过了两个位置,所以我修正了它。呵呵,所以你咬了我一口-DI自由地更新了答案,不依赖任何Objective-C材料。您的答案适用于任何“C”,当然,没问题,但您错过了两个位置,因此我将其修复。@Neil如果忽略NSDate/NSTimeInterval部分,则为::-)在那里,我对问题进行了编辑,使其不依赖于任何目标C。不,它不是,除非你也忽略方括号。@Neil同意,我现在更新了代码。第一个乘以100;第二个是1000。这是一个数量级的不同。@Neil如果忽略NSDate/NSTimeInterval部分,则为::-)在那里,我对问题进行了编辑,使其不依赖于任何目标C。不,它不是,除非你也忽略方括号。@Neil同意,我现在更新了代码。第一个乘以100;第二个是1000。这是一个数量级的不同。