C++. Сборник рецептов
Шрифт:
Вывод представленной в примере 10.2 программы выглядит следующим образом.
Таблица 10.1, рецепт 10.2.
10.2. Форматирование вывода чисел с плавающей точкой
Требуется выдать числа с плавающей точкой в удобном формате либо ради обеспечения необходимой точности (применяя нотацию, которая используется в науке, а не в виде числа с фиксированной точкой), либо просто выравнивая значения по десятичной точке для лучшего восприятия.
Используйте стандартные манипуляторы, определенные в
Пример 10.3. Форматирование числа «пи»
Это приведет к получению следующего результата.
Манипуляторы, работающие с числами с плавающей точкой, делятся на две категории. Одни из них задают формат и в данном рецепте устанавливают общий вид целых значений и значений чисел с плавающей точкой, а другие используются для тонкой настройки каждого формата. Предусмотрены следующие форматы.
Обычный (стандартный)
В этом формате фиксировано количество отображаемых цифр (по умолчанию это количество равно шести), а десятичная точка отображается в соответствующем месте. Поэтому число «пи» по умолчанию будет иметь вид
Фиксированный
В этом формате фиксировано количество цифр, отображаемое справа от десятичной точки, а количество цифр слева не фиксировано. В этом случае при стандартной точности, равной шести, число «пи» будет отображаться в виде
Научный
Значение начинается с цифры, затем идет десятичная точка и несколько цифр, количество которых определяется заданной точностью; затем идет буква «е» и степень 10, в которую надо возвести предыдущее значение. В этом случае число «пи», умноженное на 1000, будет отображаться как
В табл. 10.2 приводятся все манипуляторы, которые воздействуют на вывод чисел с плавающей точкой (а иногда и на вывод любых чисел). См. табл. 10.1, где приводятся манипуляторы общего типа, которые можно использовать совместно с манипуляторами чисел с плавающей точкой.
Табл. 10.2. Манипуляторы, работающие с любыми числами и числами с плавающей точкой
Манипулятор | Описание | Пример
|
---|---|---|
fixed | Показать значение чисел с плавающей точкой с фиксированным количеством цифр справа от десятичной точки | При стандартной точности, равной шести цифрам: pi = 3.142857 |
scientific | Показать значение чисел с плавающей точкой, применяя научную нотацию, в которой используется значение с десятичной точкой и экспонентный множитель | pi * 1000 при стандартной точности, равной шести цифрам: pi = 3.142857е+003 |
setprecision | Установить количество цифр, отображаемых в выводе (см. последующие объяснения) | Число «пи» в стандартном формате при точности, равной трем цифрам: pi = 3.14 |
В фиксированном формате: pi = 3.143 | ||
В научном формате: pi = 3.143е+000 | ||
showpos noshowpos | Показать знак «плюс» перед положительными числами. Это действует для чисел любого типа, с десятичной точкой или целых | +3.14 |
showpoint noshowpoint | Показать десятичную точку, даже если после нее идут одни нули. Это действует только для чисел с плавающей точкой и не распространяется на целые числа | Следующая строка при точности, равной двум цифрам: cout << showpoint << 2.0 выдаст такой результат: 2.00 |
showbase noshowbase | Показать основание числа, представленного в десятичном виде (основание отсутствует), в восьмеричном виде (ведущий нуль) или в шестнадцатеричном виде (префикс 0x). См. следующую строку таблицы | Десятичное представление: 32 Восьмеричное: 040 Шестнадцатеричное: 0x20 |
dec oct hex | Установить основание для отображения числа в десятичном, восьмеричном или шестнадцатеричном виде. Само основание по умолчанию не отображается; для его отображения используйте showbase | См предыдущую строку таблицы |
uppercase nouppercase | Отображать значения, используя верхний регистр | Устанавливает регистр вывода чисел, например для префикса 0X шестнадцатеричных чисел или буквы E для чисел, представленных в научной нотации |
Все манипуляторы, кроме
В результате вы получите
Для сравнения представим, что вам требуется отобразить число «пи» в формате чисел с плавающей точкой.
Теперь результат будет таким.
Отличие объясняется тем, что здесь точность определяет количество цифр, расположенных справа от десятичной точки. Если мы умножим число «пи» на 1000 и отобразим в том же формате, количество цифр справа от десятичной точки не изменится.