Как% g округляет числа с плавающей запятой? - PullRequest
3 голосов
/ 01 октября 2010

Хотя я использую %g в качестве спецификатора формата в printf(), иногда он округляется до 2 разрядов после десятичной точки, иногда до 3 раз, иногда до 4 разрядов ... как это происходит?

На самом деле, где мы должны использовать %g вместо %f или %e для чисел с плавающей запятой?

Ответы [ 4 ]

5 голосов
/ 01 октября 2010

Спецификатор формата %g выполняет округление так же, как %f, но если %f приведет к 4.234000, то %g пропустит конечные нули и напечатает 4.234.

%g следует использовать, когда в вашем выходном формате наиболее целесообразно, чтобы некоторые числа печатались как 12345.6, тогда как немного большее число печаталось бы как 1.235e04.

5 голосов
/ 01 октября 2010

%g автоматически «переворачивается» между использованием %e и %f в зависимости от значения, при попытке отобразить как можно больше информации, так же, как это делают ручные калькуляторы. Кроме того, с %g конечные нули и десятичная точка не включены.

4 голосов
/ 01 октября 2010

Для преобразования %f «точность» - это число цифр после десятичной точки , а для %g - это число значимых цифр.
Точность по умолчанию - 6 в обоих случаях.

3 голосов
/ 01 октября 2010

Из руководства printf :

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

Я не имею в виду" RTFM ", но вы, вероятно, найдете то, что вы"ищите в разделах руководства по контролю точности и длины.

...