Как получить точный формат строки значения с плавающей запятой - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть значение с плавающей точкой, скажем:

value = 0.12345

И у меня есть список других с плавающей точкой:

values = [1.04, 2.045, 2.0]

Я хотел бы получить точный формат значения smthкак:

# 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))

Как это сделать?Я нашел много ответов только во второй части моего вопроса, но не могу найти решение для получения определенного формата с плавающей точкой ...

Ответы [ 3 ]

2 голосов
/ 19 апреля 2019
<b>def</b><b> format_floats</b>(reference, values):
    formatted_values = []
    <b>for</b> i <b>in</b> range(len(values)):
        length = len(str(reference)[str(reference).find(<b>"."</b>):])-1
        new_float = str(round(values[i], length))
        new_float += <b>"0"</b>*(len(str(reference))-len(new_float))
        formatted_values.append(new_float)

    <b>return</b> formatted_values

<b>if</b> __name__ == <b>&apos;__main__&apos;</b>:

    reference = 0.12345
    values = [1.04, 2.045, 2.0]

    <b>print</b>(format_floats(reference, values))

вывод: ['1.04000', '2.04500', '2.00000']

1 голос
/ 19 апреля 2019

Я посчитал количество цифр после десятичной точки и создал строку формата в соответствии с длиной.

Таким образом, строка формата 2.045 будет 0.3f, а 0.1f для 2.0 и т. Д.

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
1 голос
/ 19 апреля 2019
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
...