Как получить n-последние цифры номера? - PullRequest
2 голосов
/ 25 июня 2011

Я конвертирую Linux Logger для работы в Windows.Регистратор печатает с snprintf.В Linux этот логгер выводит timeofday.tv_usec, который выдает что-то вроде этого:

Jun 24 18:30:31-232928 test-transport...

В моей версии Windows, используя QueryPerformanceCounter, я генерирую результаты, подобные этому:

jun 24 23:54:18-866568508 test-transport....

В Linux, секунды имеют ровно 6 цифр, но эта функция Windows генерирует 9 цифр.Как я могу напечатать только 6 последних цифр?Помните, что это критичный ко времени код.

Ответы [ 2 ]

7 голосов
/ 25 июня 2011

Используйте остаток от деления числа на 10 до степени количества цифр, которые вы хотите сохранить.

В вашем случае:

num % 1000000
0 голосов
/ 25 июня 2011

Это действительно зависит от того, что представляет число 866568508.Это наносекунды?Или микросекунды?Или это в единицах некоторого другого числа, такого как QueryPerformanceFrequency?Допустим, 866568508 представляет 866568508 тактов n герцовых часов.Тогда количество времени в секундах, представленное 866568508, равно 866568508/n.Это 866568508*1e6/n микросекунд.

Итак, ваша идея получить микросекунды с использованием последних 6 цифр не обязательно верна.Поскольку вы говорите, что обычно у вас 9 цифр, n может быть 1e9 (т. Е. У вас разрешение наносекунды).В этом случае вы можете получить микросекунды от 866568508, выполнив 866568508*1e6/1e9 = 866568508 / 1e3`.

Но, как я уже сказал, все это зависит от того, знаете ли вы, какое разрешение.

Из некоторого быстрого поиска в гугле кажется, что QueryPerformanceFrequency должен дать вам частоту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...