Точность с плавающей точкой без форматирования в строке - PullRequest
2 голосов
/ 17 апреля 2019

Когда я пишу простую функцию wprintf и передаю ей двойное число float, используя обозначение глагола L"%.2f", оно просто печатает "f" на экране вместо числа, как в формате 0.00.

Мне нужна помощь, так как везде, где бы я ни смотрел, просто говорится, что L"%.2f" - это способ печати числа с точностью до 2 десятичных цифр.

float duration = (float)((std::clock() - mTimer) / (float)(CLOCKS_PER_SEC / 1000));
wsprintf(message, L">> Speed: %.2f\r\n", duration);

Эти две строки вызывают мою головную боль ... они приводят к

>> Speed: f

выводится на консоль.

Вывод, который я ищу, таков:

>> Speed: 4000.00

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Функция wsprintf() (которая, кажется, специфична для окон) не поддерживает параметры с плавающей запятой. Вы можете выбрать swprintf() (это стандартная библиотечная функция)вместо этого.

Более того, в документации wsprintf есть примечание, в котором говорится:

Не использовать.Попробуйте вместо этого использовать одну из следующих функций: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx.См. Вопросы безопасности.

0 голосов
/ 17 апреля 2019

Что вы можете сделать, это:

cout << fixed << setprecision(2) << message << ">> Speed : "<< duration << endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...