Как объединить десятичное число в определенное число десятичных знаков с помощью функции Python 3.0 format
?
Округление десятичных знаков с помощью новой функции формата Python
Ответ 1
Вот типичный, полезный пример...:
>>> n = 4
>>> p = math.pi
>>> '{0:.{1}f}'.format(p, n)
'3.1416'
вложенный {1}
принимает второй аргумент, текущее значение n и применяет его как указано (здесь, к "прецизионной" части формата - количество цифр после десятичной точки) и внешний в результате применяется {0:.4f}
. Конечно, вы можете жестко закодировать 4
(или любое количество цифр), если хотите, но ключевой момент: не иметь
Еще лучше...:
>>> '{number:.{digits}f}'.format(number=p, digits=n)
'3.1416'
... вместо мрачных "аргументных чисел", таких как 0 и 1 выше, вы можете использовать яркие имена аргументов и передавать соответствующие значения в качестве ключевых слов (так называемых ") аргументов в format
- это может быть так гораздо более читаемым, как вы видите!!!
Ответ 2
В Python 3.x строка формата содержит поля замены, обозначенные фигурными скобками, таким образом:
".... {0: format_spec} ....".format(value)
Спецификация формата имеет общий макет:
[[fill]align][sign][pad][width][,][.precision][type]
Итак, например, оставив все остальное, кроме ширины, точности и кода типа, число в десятичной или плавающей запятой может быть отформатировано следующим образом:
>>>print("The value of pi is {0:10.7f} to 7 decimal places.".format(math.pi))
Это будет печатать как:
The value of pi is 3.1415927 to 7 decimal places.
Ответ 3
Для округления x до n десятичных знаков используйте:
"{0:.{1}f}".format(x,n)
где 0 и 1 обозначают первый и второй аргументы метода str.format(), соответственно.
Ответ 4
Я только выяснил, что можно комбинировать обозначения {0}
и {digits}
. Это особенно полезно, если вы хотите округлить все переменные до заданного числа десятичных знаков с 1 объявлением:
sName = 'Nander'
fFirstFloat = 1.12345
fSecondFloat = 2.34567
fThirdFloat = 34.5678
dNumDecimals = 2
print( '{0} found the following floats: {1:.{digits}f}, {2:.{digits}f}, {3:.{digits}f}'.format(sName, fFirstFloat, fSecondFloat, fThirdFloat, digits=dNumDecimals))
# Nander found the following floats: 1.12, 2.35, 34.57
Ответ 5
Обновленный ответ, основанный на решении [Alex Martelli], но использующий Python 3.6.2 и обновленный синтаксис формата, я бы предложил:
>>> n=4
>>> p=math.pi
>>> f'{p:.{n}f}'
'3.1416'
Но, выбирая свои переменные с умом, ваш код становится самодокументированным
>>> precision = 4
>>> pi = math.pi
>>> f'{pi:.{precision}f}'
'3.1416'