为什么我通过投射值得到不同的结果

时间:2014-07-08 09:39:40

标签: c++ casting

我真的浪费了很多时间来解决代码中的问题。 现在它正在运作,但我不明白出了什么问题。

使用QT5 / gcc

int pos;
uint m_endZeit, m_startZeit;

float secPerPx = (pos * (m_endZeit - m_startZeit)) / static_cast<float>(width());
uint a = secPerPx + m_startZeit;
uint b = static_cast<uint>(secPerPx) + m_startZeit;
std::cout << a << " vs. " << b << std::endl;    

输出:

1404809856 vs. 1404809893

任何人都可以向我解释这个吗?为什么这不一样?

1 个答案:

答案 0 :(得分:3)

What range of numbers can be represented in a 16-, 32- and 64-bit IEEE-754 systems?

浮点数的精度大约为8-9位,你已经有10位数。

uint a = secPerPx + m_startZeit;

上面的代码首先将m_startZeit强制转换为float,添加2个值,然后将其强制转换为Integer。

uint b = static_cast<uint>(secPerPx) + m_startZeit;

这将浮动转换为整数,然后才将它们加在一起。