С точки зрения непрофессионалов, что на самом деле означает строковый формат "g"? - PullRequest
6 голосов
/ 27 ноября 2011

Я чувствую себя немного глупо, спрашивая, что я уверен, что это довольно простой вопрос, но я изучал Python, и мне трудно понять, что на самом деле делают строковые форматы "g" и "G".

Документация гласит:

Формат с плавающей запятой.Использует экспоненциальный формат строчных букв, если показатель степени меньше -4 или не меньше точности, в противном случае - десятичный формат.

Я уверен, что это должно иметь смысл, но я просто не понимаю.Может ли кто-нибудь дать более четкое объяснение этого формата и, возможно, привести несколько примеров того, когда и как его следует использовать, вместо использования «e» или «f».

Спасибо

Ответы [ 2 ]

11 голосов
/ 27 ноября 2011

Эти примеры, вероятно, иллюстративны:

>>> numbers = [100, 10, 1, 0.1, 0.01, 0.001, 0.0001, 0.00001]
>>> for number in numbers:
...     print "%%e=%e, %%f=%f, %%g=%g" % (number, number, number)
... 
%e=1.000000e+02, %f=100.000000, %g=100
%e=1.000000e+01, %f=10.000000, %g=10
%e=1.000000e+00, %f=1.000000, %g=1
%e=1.000000e-01, %f=0.100000, %g=0.1
%e=1.000000e-02, %f=0.010000, %g=0.01
%e=1.000000e-03, %f=0.001000, %g=0.001
%e=1.000000e-04, %f=0.000100, %g=0.0001
%e=1.000000e-05, %f=0.000010, %g=1e-05
>>> for number in numbers:
...     print "%%0.2e=%0.2e, %%0.2f=%0.2f, %%0.2g=%0.2g" % (number, number, number)
... 
%0.2e=1.00e+02, %0.2f=100.00, %0.2g=1e+02
%0.2e=1.00e+01, %0.2f=10.00, %0.2g=10
%0.2e=1.00e+00, %0.2f=1.00, %0.2g=1
%0.2e=1.00e-01, %0.2f=0.10, %0.2g=0.1
%0.2e=1.00e-02, %0.2f=0.01, %0.2g=0.01
%0.2e=1.00e-03, %0.2f=0.00, %0.2g=0.001
%0.2e=1.00e-04, %0.2f=0.00, %0.2g=0.0001
%0.2e=1.00e-05, %0.2f=0.00, %0.2g=1e-05

Одной из приятных особенностей Python является то, что в интерпретаторе легко что-то проверить, если вы не совсем понимаете, что это значит.

3 голосов
/ 27 ноября 2011

g и G аналогичны выводу, который вы получили бы на дисплее калькулятора, если вывод очень большой или очень маленький, вы получите ответ в научной записи. Например, 0,000001 дает «1e-06» с g и «1E-06» с G. Однако числа, которые не являются слишком маленькими или слишком большими, отображаются просто как десятичные дроби 1000, что дает «1000»

e всегда дает результат в экспоненциальном формате. 1000 дает 1.000000e + 03

.

f всегда дает результат в десятичном формате, однако не округляет, что g и G do 1000 дают "1000.000000"

...