我必须将时间戳(以μs为单位)存储为uint64_t。 我的目标是能够以ms为单位获取这些时间戳之间的差异,作为具有2位小数的浮点数。
Fx我希望结果是6.520000毫秒。 虽然我似乎无法让他们正确投射。
我没试过就尝试了以下内容:
uint64_t diffus = ms.getT1 - ms.getT2
float diff = static_cast<float>(diffus);
float diffMS = diff / 1000;
std::cout << diffMS << " ms" << std::endl;
我知道这不会使浮点只有两位小数,但我甚至无法让它工作。 我似乎总是得到相同的结果,即使我用
改变T1和T2srand(time(NULL));
usleep((rand() % 25) * 1000);
输出保持:
1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms
发生了什么,我该怎么办? : - )
最好的问候。
答案 0 :(得分:1)
我假设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
答案 1 :(得分:0)
浮点数通常是32位数,因此请考虑为进一步应用执行此操作的后果......
public static void printSumByRow(int [] [] a )
{
int sum = 0;
for(int i=0;i<a.length;i++) {
sum = 0;
for(int j=0;j<a[i].length;j++) {
sum += a[i][j];
}
System.out.println("Row no. " + i + " is " + sum);
}
}
另一方面,浮点数可以用几种方式表示.... (例如科学记数法),这只是关于数字的样子,而不是数字是什么......
uint64_t diffus = ms.getT1 - ms.getT2
float diff = static_cast<float>(diffus);
可以是根据应用程序的需要以差异格式打印的相同pi编号...
如果你的问题是关于浮点数的表示,那么考虑设置cout对象的精度: std :: cout.precision , here 更多信息
3.1
3.14
3.14159