2016-11-24 175 views
0

我找一些建议了Qt的程序我的工作,使用QWT绘制的线图。使用QPointF大双打

基本上我的问题出现在图表的X轴,这是在24:00时间。我有一个QPolygonF存储了一系列保持值我的阴谋的曲线,其中X轴每1.0相当于1秒QPointF秒。然后,我使用unix时间戳为x轴设置每个值,所以基本上我已将double xAxis初始化为0.0,将其添加到QPolygonF,如points.append(xAxis, yAxis)用于曲线的开始,之后每个点使用currentTime - prevTime来查找两个时间戳之间的差异然后使用+=通过所述差异增加xAxis。如果这是有道理的。

无论如何,目前一切都显示在整秒内,它的工作原理非常好。不过,我需要它精确到毫秒。我需要一些指导,正在处理大型高精度双打。

在几秒钟内处理unix时间戳很容易,因为可以用简单的int完成,但是当您增加包含毫秒的位数时,double s将切换为科学记数法。

我的问题是:如果存储可能很大的数字,如22429.388或更大,如果它们恢复为科学记数法?

谢谢并抱歉,如果这是一个非常基本的问题。

回答

0

你说你图轴是24:00长。这将是24*3600秒,所以24*3600*1000毫秒:86,400,000这是比INT_MAX=2,147,483,647)更小的路。

因此,将x的值存储为int应该没有问题。你只需要使第一轴的值为0,那么上一个轴的值​​就是86,400,000

如果您的时间不是从0开始,您只需要将显示的最短时间定义为“参考日期”并存储基于此“参考日期”的值(以确保它们全都在00:00:00.0000之间(即: 0作为int)和24:00:00.0000(即:86,400,000作为int))。

+0

感谢您的回复!对不起,我的意思是图表显示在'hh:mm'中。它可能超过24小时。我目前使用'int',这对于'hh:mm:ss'的精度来说是非常好的。我会试着更清楚一点:我遇到的问题是使用大数字'double',我需要'QPointF'来保存绘图曲线的坐标。因为在转换为科学记数法之前双打只能保持6位数字,所以我能够拥有的最大“双”是999.999,大约16分钟。如果'currentTime - prevTime'之间的差异超过17分钟,我无法计算它。 – mrwolf

+0

double比你说的要精确得多。如果你只有三位数字,那只是你不打印正确。你在哪里看到999.999是你能获得的最大价值? – jpo38