Почему std :: cout выводит ДЕЙСТВИТЕЛЬНО маленькие научные значения записи вместо округления до нуля? - PullRequest
0 голосов
/ 29 декабря 2018

Как получить std :: cout для округления очень маленького двойного значения до нуля вместо печати значений, таких как:

6.94532807444049e-310

или

6.95321306220521e-310

Я заметилмногие из этих слишком длинных научных обозначений, которые также могут быть равны нулю, по-видимому, имеют е-310

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Операция вставки для вставки значения с плавающей запятой в поток дает небольшой результат, потому что вставленное значение мало.Задача форматирования - показать значение, а не принимать решения о том, какие изменения вы хотите внести в него, например, изменить небольшое значение на ноль.

Если вы хотите, чтобы небольшие значения приводили к нулю,Вы можете:

  • настроить значение перед вставкой в ​​поток или
  • запросить другое форматирование для значения.

Если вы хотите настроитьпреобразовав значения ниже некоторого порогового значения в ноль, вы можете использовать код, такой как:

if (abs(x) < 1e-100) x = 100;

Чтобы изменить форматирование, можно использовать формат fixed, который можно задать с точностью, заданной с помощью * 1015.* from <iomanip>:

std::cout << std::fixed << std::setprecision(8);

Последний может не предлагать гибкости, которую вы хотите, если вы хотите показывать небольшие числа с использованием научной записи (скажем, 10 -20 ), но не оченьмаленькие цифры (скажем, 10 -200 ).Нет вариантов форматирования, позволяющих использовать научную нотацию, кроме как отрубать небольшие числа ниже произвольного порога.Для этого вы должны использовать первый вариант изменения значения самостоятельно.

0 голосов
/ 29 декабря 2018

Есть несколько способов округлить число.Если вы хотите до ближайшего целого, вы должны просто использовать int.

Другим способом является использование заголовка # include iomanip и использование setprecision (2) для установки ширины.

...