tolstiyman
Цель: вывести число с заданной точностью n стандартными средствами C++, т.е. не используя сишную библиотеку stdio.
Для начала установим режим вывода с фиксированной точкой, что делается модификатором std::fixed. Затем, с помощью модификатора std::setprecision(n), устанавливаем точность вывода n. Для работы последнего модификатора необходимо подключить заголовочный файл iomanip. Таким образом код будет выглядеть приблизительно так:
Или, чтобы не писать постоянно «std::«, так:
Си — вывод на экран числа с указанной точностью
Возможно ли вывести на экран число с указанной точностью, но точность эту вводит сам пользователь. Как подобное можно реализовать?
Отслеживать
51.6k 199 199 золотых знаков 59 59 серебряных знаков 242 242 бронзовых знака
задан 31 окт 2017 в 22:17
1,790 1 1 золотой знак 19 19 серебряных знаков 35 35 бронзовых знаков
31 окт 2017 в 22:20
Что такое «точность» в вашем случае? Количество значащих цифр? Или количество знаков после запятой?
31 окт 2017 в 22:49
@AnT,количество знаков после запятой
1 ноя 2017 в 13:48
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Все очень просто — для таких случаев есть спецификатор * вместо конкретных указаний ширины и точности. Вот простенький пример:
#include #include int main(int argc, const char * argv[]) < double pi = 3.141592653589793238462643383279; for(int w = 5; w < 20; ++w) < for(int p = 1; p < w; ++p) < printf("w = %2d p = %2d pi = %*.*lf\n",w,p,w,p,pi); >> >
Надеюсь, идея понятна?
Вывод программы следующий:
w = 5 p = 1 pi = 3.1 w = 5 p = 2 pi = 3.14 w = 5 p = 3 pi = 3.142 w = 5 p = 4 pi = 3.1416 . w = 17 p = 5 pi = 3.14159 w = 17 p = 6 pi = 3.141593 w = 17 p = 7 pi = 3.1415927 . w = 19 p = 15 pi = 3.141592653589793 w = 19 p = 16 pi = 3.1415926535897931 w = 19 p = 17 pi = 3.14159265358979312 w = 19 p = 18 pi = 3.141592653589793116
Функция printf
Для вывода данных в языке C используется функция printf . Для использования этой функции необходимо подключить заголовочный файл stdio.h :
Если вы пишете на C++, то лучше подключать файл cstdio :
Функция printf получает один или более аргументов. Первый аргумент — строка, которую нужно вывести. Например, если нужно просто вывести какой-то текст, то можно написать так:
Символ ‘\n’ в конце вывода означает символ перехода на новую строку.
Если нужно вывести значения какой-то переменной, то в форматной строке вместо этой переменной указывается специальное выражение, начинающееся с символа «%». Например, для вывода целого числа типа int указывается строка «%d». Сами переменные указываются после форматной строки, следующими параметрами, передаваемыми функции printf .
Например, чтобы напечатать значения переменных a и b типа int через пробел можно использовать следующую функцию:
Выводимые типы
Перечислим разные типы данных, которые можно выводить при помощи функции printf и соответствующие им форматные строки.
%d или %i |
Выводится целое число (значение типа int) в десятичной системе счисления. Для вывода значений типа short int используется %hd, long int — %ld, long long int — %lld. |
%u | Выводится беззнаковое целое число (значение типа unsigned int) в десятичной системе счисления. Для вывода значений типа unsigned short используется %hu, unsigned long — %lu, unsigned long long — %llu. |
%e | Выводится значение типа double в экспоненциальной форме, например, число 123.456 будет выведено в виде 1.234560e+002. Для вывода значения типа double также используется %le, для вывода long double — %Le (в Windows может не работать). |
%f | Выводится значение типа double с фиксированной точкой. Например, число 1e20 будет выведено, как 10000000000.000000. Для вывода значения типа double также используется %lf, для вывода long double — %Lf (в Windows может не работать). |
%g | Значение типа double выводится либо с фиксированной точкой, либо с плавающей точкой, в зависимости от величины числа. Аналогично используется %lg для double и %Lg для long double. |
%c | Выводится один символ (значение типа char). |
s | выводится содержимое C-строки. В качестве параметра передается указатель char * или массив символов char[]. |
%% | Вывести один символ %, никакого значения переменной при этом не передается. |
Значения целых чисел также можно выводить в восьмеричной или шестнадцатеричной системах счисления.
Обратите внимание, переменную типа float вывести при помощи функции printf нельзя (можно привести значение типа float к типу double и вывести его).
В операционной системе Windows не рекомендуется использовать тип long double.
Модификаторы длины
Эти модификаторы пишутся между знаком % и символом, обозначающим тип. Например, %lld. Эти модификаторы используются для того, чтобы вывести значения типов short int, long int , long double и т.д. и уже упоминались раньше.
Используется для значения типа long int или unsigned long int вместе с модификаторами d, i, u.
Используется для значения типа double вместе с модификаторами e, f, g.
Ширина поля вывода
После знака % можно задать ширину поля для вывода в виде целого числа (не начинающегося с нуля). В этом случае число вывод этого числа будет занимать указанное число символов. Если в числе меньше цифр, чем заданная ширина поля вывода, то перед числом (слева) выводятся пробелы. Если же в числе больше цифр, чем ширина поля, то выводятся все цифры (то есть выводится больше цифр, чем вся ширина поля, поле расширяется, чтобы вывести все символы).
Если перед шириной поля поставить цифру 0, например, «%010d», то число будет дополняться слева не пробелами, а нулями. Это удобно, например, для вывода времени в формате hh:mm, что можно сделать, например, так:
printf(«%02d:%02d», h, m);
Если перед шириной поля поставить знак «-«, то число будет дополняться пробелами не слева, а справа (сначала выводится число, потом — дополнительные пробелы до заполнения всего поля).
Также вместо ширины поля вывода можно указать символ «*» (звездочка), тогда значение ширины поля вывода нужно передать в качестве дополнительного параметра. Например, запись:
означает вывести значение переменной a используя поле шириной n символов.
Точность вывода действительных чисел
По умолчанию действительные числа выводятся с 6 знаками после точки, при этом числа в экспоненциальной форме выводятся в виде одной цифры, точки и 6 цифр после точки (и показателя степени).
Для изменения точности вывода действительных чисел в форматной строке указывается символ точки (‘.’) и после нее число — количество выводимых знаков после точки. Например, так:
Вывод целых чисел со знаком +/-
Если при выводе целого числа в форматной строке задать символ «+», то положительные числа будут выводиться с обязательным знаком «+» перед ними.
Большинство перечисленных выше параметров комбинируются друг с другом. Например, такая строка:
означает вывод числа типа long long, со знаком «+» или «-» перед числом, с добавлением нулей таким образом, что общее число выводимых символов будет не меньше 20.
Типы данных
Вывод действительных чисел на C++ Перед выводом действительных чисел (float, double, long double) следует указать выходному потоку точность вывода. Например:
float x; x = 123.456789; cout.setf(ios::fixed); // вывод в фиксированном формате cout.precision(6); // вывод до 6 знака после точки, включительно cout
Вы используете гостевой доступ (Вход)
Эта страница: General type: incourse. Context Страница: Вывод действительных чисел на C++ (context id 276028). Page type mod-page-view.