Преобразуйте число с плавающей запятой в определенную точность, затем скопируйте в String

У меня есть число с плавающей запятой, например 135.12345678910. Я хочу связать это значение с строкой, но хочу только 135.123456789. С печатью я могу легко сделать это, выполнив что-то вроде:

print "%.9f" % numvar

с numvar, являющимся моим первоначальным номером. Есть ли простой способ сделать это?

Ответ 1

С 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.

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

UPDATE: Python 3.6 (официальная версия в декабре 2016 года) добавит строковый литерал f, подробнее см. здесь, который расширяет метод str.format(использование фигурных скобок, так что f"{numvar:.9f}" решает исходную задачу).

Ответ 2

Использование round:

>>> numvar = 135.12345678910
>>> str(round(numvar,9))
'135.123456789'
>>>

Ответ 3

Python 3.6 | 2017

Чтобы это было ясно, вы можете использовать форматирование f-string. Это почти тот же синтаксис, что и метод format, но сделать его немного лучше.

Пример:

print(f'{numvar:.9f}')

Подробнее о новой строке f:

Ответ 4

Не печатает, что делает форматирование, это свойство строк, поэтому вы можете просто использовать

newstring = "%.9f" % numvar

Ответ 5

Если точность пока неизвестна до выполнения, эта другая опция форматирования полезна:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

Ответ 6

Функция

str имеет ошибку. Пожалуйста, попробуйте это. Вы увидите "0,196553", но правый выход "0,196554". Значение параметра str для функции str равно ROUND_HALF_UP.

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")