#python #string-formatting
#python #форматирование строки
Вопрос:
У меня есть значение с плавающей запятой, скажем:
value = 0.12345
И у меня есть список других значений с плавающей запятой :
values = [1.04, 2.045, 2.0]
Я хотел бы получить точный формат значения, например:
# result should be'0.5f'
format_str = Formatter.get_float_format(value)
# and apply that format to values in the list
values = [1.04, 2.045, 2.0]
for v in values:
print({format_str}.format(v))
Как это сделать?
Я нашел только много ответов на вторую часть своего вопроса, но не могу найти решение для получения определенного формата с плавающей запятой…
Комментарии:
1. Проверьте
Decimal
2. Я не уверен, что правильно понял, поэтому вы хотите, чтобы каждый элемент с плавающей запятой в вашем списке стал строкой со следующим форматом
0.5f
? если это так, следующий фрагмент сделает волшебствоformated = [str(float)[:3] 'f' for float in values]
3. Вы можете
5
легко определить десятичную0.5f
дробь. Проверьте, имеет ли мой ответ смысл для вас!
Ответ №1:
format_floats def(ссылка, значения): formatted_values = [] для i в диапазоне (len(значения)): длина = len(str(ссылка)[str(ссылка).find("."):])-1 new_float = str(round(значения [i], длина)) new_float = "0"*(len(str(ссылка))-len(new_float)) formatted_values.append(new_float) возвращает formatted_values если __name__ == '__main__': ссылка = 0,12345 значения = [1,04, 2,045, 2,0] print(format_floats(ссылка, значения))
вывод: [‘1.04000’, ‘2.04500’, ‘2.00000’]
Ответ №2:
value = 0.12345
values = [1.04, 2.045, 2.0]
value_length = len(str(value).split('.')[-1]) # length of numbers after a coma -> 5
float_format = '{0:.' str(value_length) 'f}' # -> {0:.5f}
for v in values:
print(float_format.format(v))
Вывод:
1.04000
2.04500
2.00000
Ответ №3:
Я подсчитал количество цифр после десятичной запятой и создал строку формата в соответствии с длиной.
Таким образом, строка формата 2.045
будет 0.3f
, и 0.1f
для 2.0
etc.
def get_format(value):
#dec is the number after decimal point
dec = str(value).split('.')[1]
#Created the format string using the number of digits in dec
format_str = '0.{}f'.format(len(dec))
print(format_str)
print(format(value, format_str))
values = [ 0.12345, 1.04, 2.045, 2.0]
for value in values:
get_format(value)
вывод выглядит следующим образом
0.5f
0.12345
0.2f
1.04
0.3f
2.045
0.1f
2.0