Добавить нули к дробной части числа с плавающей запятой в Python
Я читаю данные из файла, модифицирую их и записываю в другой файл. Новый файл будет читаться другой программой, поэтому критически важно сохранить точное форматирование.
Например, одно из чисел в моем входном файле выглядит так:
1.000000
Мой скрипт применяет некоторые математические операции к столбцам и должен вернуть:
2.000000
Но в данный момент возвращается:
2.0
Как мне записать число с плавающей запятой, например my_float = 2.0
, в формате my_float = 2.00000
в файл?
3 ответ(ов)
Я пробовал много способов, но ни один из них не работал так, как мне хотелось, пока наконец не сработал следующий:
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
возвращает строку.
У вас возникли проблемы с использованием переменных в 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}}" # Правильно
Это устранит возникновение конфликтов и ваше выражение будет работать корректно!
Ответ с использованием команды format()
представлен выше, но если вы работаете с числами с плавающей запятой, которые должны представлять точное значение, вам стоит обратить внимание на объект из стандартной библиотеки decimal
. Вы можете установить точность и округление в его контекстном классе, но по умолчанию он сохранит количество нулей, которые вы в него поместите:
>>> import decimal
>>> x = decimal.Decimal('2.0000')
>>> x
Decimal('2.0000')
>>> print(x)
2.0000
>>> print("{0} — хорошее число.".format(x))
2.0000 — хорошее число.
Как преобразовать строку в float или int?
Как использовать десятичное значение шага в range()?
Как округлить число ВВЕРХ?
Невозможно умножить последовательность на тип 'float' — не целое число [закрыто]
numpy float в 10 раз медленнее встроенных типов при арифметических операциях?