时间戳差异有两位小数c ++

时间:2017-05-01 14:02:22

标签: c++ timestamp precision floating-accuracy uint64

我必须将时间戳(以μ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和T2
srand(time(NULL));
usleep((rand() % 25) * 1000);

输出保持:

1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms
1.84467e+16 ms

发生了什么,我该怎么办? : - )

最好的问候。

2 个答案:

答案 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