i必须到时间戳(以µs为单位(,将其存储为uint64_t。我的目标是能够在MS中获得这些时间戳之间的区别,作为带有2个小数的浮子。
fx我希望结果为6.520000 ms。虽然我似乎无法让他们正确地铸造。
我尝试了以下操作,没有任何运气:
uint64_t diffus = ms.getT1 - ms.getT2
float diff = static_cast<float>(diffus);
float diffMS = diff / 1000;
std::cout << diffMS << " ms" << std::endl;
我知道这不会使浮子只有两个小数,但我什至无法正常工作。即使我用
改变了T1和T2,我似乎一直都会得到相同的结果srand(time(NULL));
usleep((rand() % 25) * 1000);
输出一直是:
1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms
发生了什么,我该怎么办?: - (
最好的问候。
我假设Ms.gett1和Ms.gett2表示T1比T2早。
。在那种情况下,您正在为浮动施放一个负数,而第一个位可能是为了您的期望而被错误地解释。
以下测试证实了我的假设:
// Force diffus to be a negative number.
uint64_t diffus = 20 - 30;
float diff = static_cast<float>(diffus);
float diffMS = diff / 1000;
std::cout << diffMS << " ms" << std::endl;
// Result of casting negative integer to float.
1.84467e+16 ms
// Force diffus to be a positive number.
uint64_t diffus = 30 - 20;
float diff = static_cast<float>(diffus);
float diffMS = diff / 1000;
std::cout << diffMS << " ms" << std::endl;
// Result of casting positive integer to float.
0.01 ms
浮点通常是32位编号,因此请考虑为进一步应用程序这样做的后果...
uint64_t diffus = ms.getT1 - ms.getT2
float diff = static_cast<float>(diffus);
另一方面,浮点数可以通过几种方式表示。(例如,科学符号(,这仅是关于数字的外观,而不是关于数字所持的。
3.1
3.14
3.14159
可能是根据应用程序的需求以差异格式打印的同一PI编号...
如果您的问题是关于浮点数的表示形式,请考虑设置Cout对象的精度: std :: cout.precision.precision ,在这里更多信息
std::cout.precision(2);
std::cout << diffMS << " ms" << std::endl;