Точность усечения всех значений с плавающей запятой, присутствующих в строке, до 10 десятичных знаков - PullRequest
0 голосов
/ 08 июля 2019

Я хочу округлить все числа с плавающей точкой в ​​строке, чтобы сказать 10 десятичных знаков.Я придумал следующую реализацию, которая находит все числа с плавающей точкой с помощью регулярных выражений, преобразует их в числа с плавающей точкой, вызывая float для каждого из них, а затем выполняет округление с использованием строк формата в Python (например, {:.10f}".format(float("0.12345678912345777")).

import re

def truncate_floats(input, precision):
    for f in re.findall(r"[-+]?\d*\.\d{{{},}}".format(precision), input):
        format_str = "{{:.{}f}}".format(precision)
        input = input.replace(f, format_str.format(float(f)))
    return input

In [1]: truncate_floats("x + -2.12345678912345777 + 123 + 0.123", 10)
Out[1]: 'x + -2.1234567891 + 123 + 0.123'

Есть ли способ добиться этого лучше?Код предназначен как для Python 2.7 , так и 3.7 .

Update1: строка не обязательно должна содержать пробелы между числами и другими объектами.

...