2016-11-24 8 views
0

Я ищу несколько советов для Qt-программы, над которой я работаю, которая использует Qwt для рисования линейного графика.Использование QPointF с большими суммами

В основном моя проблема возникает из-за оси x графика, которая находится в 24:00. У меня есть QPolygonF, в котором хранится серия QPointF s, в которой хранятся значения для моей кривой графика, где каждый 1.0 по оси x равен 1 секунде. Затем я использую временные метки 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'. На этот раз я постараюсь быть более ясным: проблема, с которой я сталкиваюсь, заключается в использовании больших чисел с «двойниками», которые мне нужны для 'QPointF', которые содержат координаты для моей кривой графика. Поскольку удваивается до шести цифр, прежде чем перейти к научной нотации, максимальная «двойная», которую я могу иметь, составляет 999,999, что составляет около 16 минут. Если разница между 'currentTime - prevTime' составляет более 17 минут, я не могу ее вычислить. – mrwolf

+0

double имеет гораздо лучшую точность, чем то, что вы говорите. Если вы получите только три цифры, просто не печатайте их правильно. Где вы видели, что 999.999 будет самой большой ценностью, которую вы могли бы получить? – jpo38