Отформатировать номер в строку в соответствии с номером шаблона - PullRequest
1 голос
/ 26 октября 2019

Я хотел бы отобразить число в соответствии с точностью другого номера шаблона / примера.

Например, иметь example_number = 0.0001 и иметь возможность делать format_fp_digits_like(example_number, another_number)another_number=10.12345 я бы получил 10.1234.

Это то, что я пробовал до сих пор:

import math

def format_fp_digits_like(template_number, number):
    n_digits = len(str(int(number)))
    if '.' in str(template_number):
        n_fp_digits = len(str(math.modf(template_number)[0]).split(".")[-1])
    else:
        n_fp_digits = 0
    fs = "{:"+f"{n_digits}.{n_fp_digits}f"+"}"
    return fs.format(number)

assert format_fp_digits_like(0.0001, 16.12345) == "16.1234"
assert format_fp_digits_like(1, 16.123) == "16"
assert format_fp_digits_like(0.1, 8.5) == "8.5"

Это работает, но я нахожу это неуклюжим. Есть, наверное, лучший способ?

1 Ответ

1 голос
/ 26 октября 2019

Вы также можете использовать форматирование строки:

def rounder(template_number, number):
    return ('{0:.%sf}' % len(str(template_number).split('.')[-1])).format(number)


rounder(0.0001, 10.12345)

'10.1235'
...