Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Из Руководство Printf.:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top