0

Добавить нули к дробной части числа с плавающей запятой в Python

11

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

Например, одно из чисел в моем входном файле выглядит так:

1.000000

Мой скрипт применяет некоторые математические операции к столбцам и должен вернуть:

2.000000

Но в данный момент возвращается:

2.0

Как мне записать число с плавающей запятой, например my_float = 2.0, в формате my_float = 2.00000 в файл?

3 ответ(ов)

0

Я пробовал много способов, но ни один из них не работал так, как мне хотелось, пока наконец не сработал следующий:

foo = 56
print(format(foo, '.1f'))
print(format(foo, '.2f'))
print(format(foo, '.3f'))
print(format(foo, '.5f'))

Вывод будет следующим:

56.0
56.00
56.000
56.00000

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

0

У вас возникли проблемы с использованием переменных в f-строках? Это распространённая ситуация, и, как говорится, если ничего не помогает, читайте документацию 😃

Одним из аспектов синтаксиса f-строк является то, что символы в полях замены не должны конфликтовать с кавычками, используемыми в самой f-строке. Это подробно описано в документации Python: ссылка на документацию.

Вот пример:

my_number = 90000
zeros = '.2f'

my_string = f"{my_number:,{zeros}}"

print(my_string)
# Вывод: 90,000.00

Однако если вы попытаетесь сделать так:

my_string = f'{my_number:,{zeros}}'  # Это не сработает из-за одиночных кавычек

то это не сработает, потому что возникает конфликт между одиночными кавычками в f-строке и одинарными кавычками в строковой переменной.

Поэтому важно, чтобы кавычки, содержащие f-строку, и строковая переменная, используемая в f-строке, были разными. Если вы используете одиночные кавычки для строковой переменной, используйте двойные кавычки для f-строки, и наоборот. Например:

my_string = f"{my_number:,{zeros}}"  # Правильно

Это устранит возникновение конфликтов и ваше выражение будет работать корректно!

0

Ответ с использованием команды format() представлен выше, но если вы работаете с числами с плавающей запятой, которые должны представлять точное значение, вам стоит обратить внимание на объект из стандартной библиотеки decimal. Вы можете установить точность и округление в его контекстном классе, но по умолчанию он сохранит количество нулей, которые вы в него поместите:

>>> import decimal
>>> x = decimal.Decimal('2.0000')
>>> x
Decimal('2.0000')
>>> print(x)
2.0000
>>> print("{0} — хорошее число.".format(x))
2.0000 — хорошее число.
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь