目前正试图将无符号长整数除以静态值。
unsigned long long包含操作完成所用的微秒数。我想取这个值并将其转换为秒。
以下是代码snippit:
double udDiffTime = ullHighResDiffTime / (unsigned long long)1000000;
在我的调试器的一个案例中,我可以看到ullHighResDiffTime = 639.因此,udDiffTime = 0.000639。但是,我得到了udDiffTime = 0。
我确定我在某个地方犯了错误。我尝试过使用1000000LL而不是使用(unsigned long long)进行投射,但是没有区别。
答案 0 :(得分:7)
你正在进行整数除法,因此如果结果是0.000639,它将被截断为0。
如果需要浮点结果,则必须至少使用一个浮点操作数。例如,尝试将(unsigned long long) 1000000
更改为1000000.0
。
无符号长多头可以达到18,446,744,073,709,551,615。 double
最高可以达到1.7E308(即一个有308个零的一个)。问题在于,值越高,精度越低,所以你需要问自己的是,大值是否真的需要精确,或者更重要的是这个数字的大小。
答案 1 :(得分:1)
将其更改为
double udDiffTime = ullHighResDiffTime / 1000000.0;
获得您期望的结果。
答案 2 :(得分:0)
unsigned long long
是一个整数类型,因此使用积分除法。仅在除法之后将值转换为double
。尝试除以1000000.0
。
答案 3 :(得分:0)
如果ullHighResDiffTime
的类型是无符号长的,那么你将整数除以整数,它不会调用浮点运算。
请改用:
double udDiffTime = ullHighResDiffTime / 1000000.0;
答案 4 :(得分:0)
将无符号long long(或任何整数)除以相同类型会产生相同的类型。然后将值转换为double,但结果已经为零。
将它除以双倍。