В чем разница между% g и% f в C? - PullRequest
24 голосов
/ 06 мая 2011

Я изучал язык программирования C от K & R.Здесь в инструкции для печати двойной переменной написано

printf("\t%g\n", sum += atof(line));

, где сумма объявлена ​​как двойная.Может кто-нибудь, пожалуйста, помогите мне, когда использовать% g в случае double или в случае с плавающей запятой и в чем разница между% g и% f.

Ответы [ 4 ]

34 голосов
/ 06 мая 2011

Они оба являются примерами ввода / вывода с плавающей запятой.

% g и% G - упрощенные выражения для числовых чисел% e и% E.

% g возьмет число, которое может быть представлено как% f (простое число с плавающей запятой или двойное число) или% e (научная запись), и вернет его как меньшее из двух.вывод вашего оператора печати будет зависеть от значения суммы.

25 голосов
/ 06 мая 2011

См. Любое справочное руководство, например справочную страницу :

f, F

Двойной аргумент округляется и преобразуется в десятичную запись вstyle [-] ddd.ddd, где число цифр после символа десятичной точки равно спецификации точности.Если точность отсутствует, она принимается за 6;если точность явно равна нулю, символ десятичной точки не появляется.Если появляется десятичная точка, перед ней должна быть хотя бы одна цифра.(SUSv2 не знает о F и говорит, что представления символьных строк для бесконечности и NaN могут быть доступны. Стандарт C99 определяет «[-] inf» или «[-] бесконечность» для бесконечности и строку, начинающуюся с «nan»).'для NaN, в случае f-преобразования, и' [-] INF 'или' [-] INFINITY 'или' NAN * 'в случае F-преобразования.)

g, G

Двойной аргумент преобразуется в стиль f или e (или F или E для преобразования G).Точность определяет количество значащих цифр.Если точность отсутствует, дается 6 цифр;если точность равна нулю, он обрабатывается как 1. Стиль e используется, если показатель степени от его преобразования меньше -4 или больше или равен точности.Замыкающие нули удаляются из дробной части результата;десятичная точка появляется, только если за ней следует хотя бы одна цифра.

3 голосов
/ 06 мая 2011

Как указывает Unwind, f и g предоставляют разные выходные данные по умолчанию.

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

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

Извините за неясный ответ, но это субъективная вещь, которая дает жесткие ответы, только если важно количество сгенерированных символов или точность представленного значения.

0 голосов
/ 23 мая 2017

% f и% g делают то же самое.Разница лишь в том, что% g является более короткой формой% f.То есть точность после десятичной точки больше в% f по сравнению с% g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...