Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

1.234568e+003 // манипулятор научного формата является

// персистентным

1234.57 1234.567890 1.234568e+003

Итак, существует несколько манипуляторов для работы с числами с плавающей точкой.

11.2.4. Точность

По умолчанию число с плавающей точкой выводится на печать с помощью шести цифр в формате

general
. Формат, состоящий из шести цифр (точность формата general по умолчанию), считается наиболее подходящим, а такое округление числа — наилучшим. Рассмотрим пример.

1234.567
выводится на печать как
1234.57

1.2345678
выводится на печать как
1.23457

Округление, как правило, выполняется по правилу 4/5: от 0 до 4 — округление вниз, а от 5 до 9 — вверх. Обратите внимание на то, что такое форматирование относится только к числам с плавающей точкой.

1234567
выводится на печать как
1234567
(поскольку число целое)

1234567.0
выводится на печать как
1.23457e+006

В последнем случае поток

ostream
распознает, что число
1234567.0
нельзя вывести на печать в формате
fixed
, используя только шесть цифр, и переключается на формат
scientific
, чтобы обеспечить как можно более точное представление числа. В принципе формат
general
может автоматически заменяться форматами
scientific
и
fixed
, чтобы обеспечить максимально точное представление числа с плавающей точкой в рамках общего формата, предусматривающего использование шести цифр.

ПОПРОБУЙТЕ

Напишите программу, три раза выводящую на печать число

1234567.89
, сначала в формате
general
, затем — в
fixed
, потом — в
scientific
. Какая форма вывода обеспечивает наиболее точное представление числа и почему?

Программист может установить точность представления числа, используя манипулятор

setprecision
. Рассмотрим пример.

cout << 1234.56789 << '\t'

<< fixed << 1234.56789 << '\t'

<< scientific << 1234.56789 << '\n';

cout << general << setprecision(5)

<< 1234.56789 << '\t'

<< fixed << 1234.56789 << '\t'

<< scientific << 1234.56789 << '\n';

cout << general << setprecision(8)

<< 1234.56789 << '\t'

<< fixed << 1234.56789 << '\t'

<< scientific << 1234.56789 << '\n';

Этот код выводит на печать следующие числа (обратите внимание на округление):

1234.57 1234.567890 1.234568e+003

1234.6 1234.56789 1.23457e+003

1234.5679 1234.56789000 1.23456789e+003

Точность определятся по правилам, приведенным ниже.

Мы рекомендуем использовать формат, принятый по умолчанию (формат

general
с точностью, равной шести цифрам), если у вас нет весомых причин для применения другого формата. Обычно причина, по которой выбираются другие форматы, такова: “Мы хотим получить большую точность при выводе”.

11.2.5. Поля

С помощью научного и фиксированного формата программист может точно контролировать, сколько места займет число на выходе. Это очень полезно при распечатке таблиц и т.п. Эквивалентный механизм для целых чисел называют полями (fields). Вы можете точно указать ширину поля, используя манипулятор

setw
. Рассмотрим пример.

cout << 123456 // поля не используются

<<'|'<< setw(4) << 123456 << '|' // число 123456

// не помещается в поле

<< setw(8) << 123456 << '|' // из 4 символов,

// расширим до 8

<< 123456 << "|\n"; // размеры полей не инертны

В итоге получим следующий результат:

123456|123456| 123456|123456|

  • Читать дальше
  • 1
  • ...
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: