Как получить точный строковый формат значения с плавающей запятой

#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