Если вы хотите округлить m числа в стандартной форме (m × bⁿ), вы можете сделать это следующим образом: для m, b и n число, основание ипоказатель степени, соответственно:
import math
def round_(m, d, b = 10):
n = math.floor(math.log(abs(m), b),)
return float(round(m * (b ** (d - n))) * (b ** - (d - n)))
Некоторые тестовые выходы:
>>> print(round_(1.23456783456787434567e-22, 1))
1.2299999999999998e-22
>>> round_(-1.23456783456787434567e+159, 7)
-1.2345678e+159
>>> round_(1.23456783456787434567e+50, 6)
1.234568e+50
>>> round_(-0.23456783456787434567e+256, 5)
-2.34568e+255
>>> round_(1.23456783456787434567e+255, 4)
1.2346e+255
>>> round_(0.23456783456787434567e+272, 3)
2.346e+271
>>> round_(1.23456783456787434567e-23, 2)
1.235e-22
>>> round_(-1.23456783456787434567e+251, 1)
-1.2e+251
Могут возникнуть переполнения (см. вывод № 1) .
Протестированоиспользуя Python 3.7.