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


144

Скажімо, у мене номер з плаваючою комою 135.12345678910. Я хочу приєднати це значення до рядка, але хочу лише 135.123456789. З друком я легко це роблю, роблячи щось на кшталт:

print "%.9f" % numvar

з numvarмоїм оригінальним номером. Чи є простий спосіб це зробити?


3
% точно це робить -% не є частиною функції друку, а рядка - див. Документи Python
michael_s

Відповіді:


177

З 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) варіант 2 є кращим .

Для отримання додаткової інформації щодо другого варіанту пропоную це посилання щодо форматування рядків з документації 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 для отримання додаткової інформації, але цей метод швидкий .


1
повинен бути другий варіант newer_method_string = "{:.9f}".format(numvar)- відзначте необхідні :для розділення поля та форматування. Я протестував це на 2.7.5 в будь-якому випадку.
Caltor

1
Для python 2.6 має бути два варіанти newer_method_string = "{0:.9f}".format(numvar)- відзначте необхідну 0 для імені поля для цієї старшої версії.
ttq

56

Пітон 3.6

Просто для того, щоб було зрозуміло, ви можете використовувати форматування f-string . Це майже такий же синтаксис, що і formatметод, але зробити його трохи приємніше.

Приклад:

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

Детальніше про нову строку f:

Ось схема часу виконання різних перевірених методів (з останнього посилання вище):

строки виконання



8

Форматування не друкує, це властивість рядків, тому ви можете просто використовувати

newstring = "%.9f" % numvar

Або скористайтеся новим форматуванням стилів. valueString = "{:. 9f}". формат (число)
Зарен

8

Якщо точність не відома до часу виконання, цей інший варіант форматування корисний:

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

3
Якщо ви віддаєте перевагу використовувати .format-метод, зверніть увагу , що це також може бути зроблено з допомогою гніздових аргументів подобається так: '{:.{n}f}'.format(numvar,n=n).
nivk

2

Щоб встановити точність з 9 цифр, отримайте:

print "%.9f" % numvar

Точність повернення з двома цифрами:

print "%.2f" % numvar 

Поверніть точність з двома цифрами та перетвореним значенням поплавця:

numvar = 4.2345
print float("%.2f" % numvar) 

-2

У strфункції є помилка. Будь ласка, спробуйте наступне. Ви побачите "0,196553", але правильний вихід "0,196554". Тому що strзначенням за замовчуванням функції є ROUND_HALF_UP.

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

2
Що з .проти ,? І наскільки це актуально для питання pauliwago?
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.