Скажем, у меня есть число с плавающей запятой 135.12345678910
. Я хочу объединить это значение в строку, но только хочу 135.123456789
. С помощью print я могу легко сделать это, сделав что-то вроде:
print "%.9f" % numvar
с numvar
моим исходным номером. Есть простой способ сделать это?
python
string
floating-point
Pauliwago
источник
источник
Ответы:
В Python <3 (например, 2.6 [см. Комментарии] или 2.7) есть два способа сделать это.
# Option one older_method_string = "%.9f" % numvar # Option two newer_method_string = "{:.9f}".format(numvar)
Но обратите внимание, что для версий Python выше 3 (например, 3.2 или 3.3) предпочтительнее второй вариант .
Для получения дополнительной информации о втором варианте я предлагаю эту ссылку на форматирование строк из документации Python .
А для получения дополнительной информации о первом варианте этой ссылки будет достаточно, и она содержит информацию о различных флагах .
Python 3.6 (официально выпущенный в декабре 2016 года) добавил
f
строковый литерал, см. Дополнительную информацию здесь , который расширяетstr.format
метод (использование фигурных скобок, чтоf"{numvar:.9f}"
решает исходную проблему), то есть# Option 3 (versions 3.6 and higher) newest_method_string = f"{numvar:.9f}"
решает проблему. Ознакомьтесь с ответом @Or-Duan для получения дополнительной информации, но этот метод быстрый .
источник
newer_method_string = "{:.9f}".format(numvar)
- обратите внимание на необходимость:
разделения поля и форматирования. Я все равно тестировал это на 2.7.5.newer_method_string = "{0:.9f}".format(numvar)
- обратите внимание на обязательный 0 для field_name для этой старой версии.Python 3.6
Чтобы было понятно, вы можете использовать форматирование f-строки . Синтаксис у него почти такой же, как у
format
метода, но он немного лучше.Пример:
print(f'{numvar:.9f}')
Подробнее о новой строке f:
Вот диаграмма времени выполнения различных протестированных методов (из последней ссылки выше):
источник
Использование
round
:>>> numvar = 135.12345678910 >>> str(round(numvar, 9)) '135.123456789'
источник
Это не печать, которая выполняет форматирование, это свойство строк, поэтому вы можете просто использовать
newstring = "%.9f" % numvar
источник
Если точность неизвестна до времени выполнения, полезен другой вариант форматирования:
>>> n = 9 >>> '%.*f' % (n, numvar) '135.123456789'
источник
.format
-метод, обратите внимание , что это также может быть сделано с помощью гнездовых аргументов нравится так:'{:.{n}f}'.format(numvar,n=n)
.Чтобы установить точность с 9 цифрами, получите:
print "%.9f" % numvar
Точность возврата с двумя цифрами:
print "%.2f" % numvar
Точность возврата с 2 цифрами и преобразованным значением с плавающей запятой:
numvar = 4.2345 print float("%.2f" % numvar)
источник
В
str
функции есть ошибка. Пожалуйста, попробуйте следующее. Вы увидите «0,196553», но правильный результат - «0,196554». Поскольку значениеstr
функции по умолчанию - ROUND_HALF_UP.>>> value=0.196553500000 >>> str("%f" % value).replace(".", ",")
источник
.
vs.,
? И насколько это актуально для вопроса Пауливаго?,