Это намного проще, если вы используете строку форматирования, потому что вы можете заменить даже параметры форматирования в ней.Это позволит вам управлять всеми атрибутами программно:
value = 15236.265
error = 3.738
p1 = 10
p2 = 3
print(f"Value is {value:.{p1}g} and error is {error:.{p2}g}")
# 'Value is 15236.265 and error is 3.74'
РЕДАКТИРОВАТЬ
Я вижу из вашего комментария, что это не проблема форматирования, а проблема округления.Вы хотите округлить мантиссу ошибки и применить такое же округление к самому значению.
Вот функция, которая сделает это за вас:
from math import log
def roundError(N,E):
p=-round(log(E,10)-0.5)
return round(N,p),round(E,p)
roundError(15236.265,0.059) # --> (15236.26, 0.06)
roundError(15236.265,3.738) # --> (15236, 4)
roundError(15236.265,275.658) # --> (15200, 300)
Затем вы можете распечатать этичисла без какого-либо специального форматирования.
Возможно, это вас не беспокоит, но я хотел бы отметить, что эта корректировка значения / ошибки немного сместит диапазон возможных значений в пределах допустимой погрешности.
например:
15236.265 +/- 275.658 ==> 14960.607 ... 15511.923
15200 +/- 300 ==> 14900 ... 15500 (extra 60 low and missing 12 high)
Чтобы ошибиться на стороне предостережения, вероятно, потребуется, чтобы округленный диапазон значений был 14950 ... 15550, поэтому 15250 +/- 300. Другими словами, округлениезначение, равное половине величины ошибки round(2*N,p)/2
для учета округления, примененного к диапазону значений.