Как% г раунды плавающих точек?
-
27-09-2019 - |
Вопрос
Пока я использую %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 в обоих случаях.
«Двойной аргумент преобразуется в стиле F или E (или F или E для преобразований G). Прецизионная точность указывает количество существенных цифр. Если точность отсутствует, приведена точность, 6 цифр приведены; если точность равен нулю, это обработано Как 1. Стиль E используется, если экспонент от его преобразования меньше, чем 4 или больше или равен точке. Трейлинг нули удаляются из дробной части результата; десятичная точка появляется только в том случае, если она сопровождается в минимум одна цифра ».
Я не имею в виду «RTFM», но вы, вероятно, найдете то, что вы ищете в ручных разделах по контрольной точности и длине.