Как округлить число до двух первых значащих цифр после запятой?

К своему стыду никак не могу найти способ округлять числа так (до двух первых значащих цифр после запятой):

0,0003658313517468447045911834644229 -> 0,00037
0.15 -> 0.15
0.156 -> 0.16
0.006 -> 0.006
0.0066 -> 0.0066

Есть способ делать это из коробки?


Ответы (1 шт):

Автор решения: GrAnd

У меня получилась такая функция:

import math

def round_to(num, digits=2):
    if num == 0: return 0
    scale = int(-math.floor(math.log10(abs(num - int(num))))) + digits - 1
    if scale < digits: scale = digits
    return round(num, scale)

# ну или оно же в виде однострочной лямбды
_round_to = lambda num, digits: 0 if num == 0 else round(num, max(int(-math.floor(math.log10(abs(num - int(num))))) + digits - 1, digits))


nums = [0.0003658313517468447045911834644229, 0.15, 0.156, 0.006, 0.0066]
print(*[(x, round_to(x)) for x in nums], sep="\n")

Результат:

(0.0003658313517468447, 0.00037)
(0.15, 0.15)
(0.156, 0.16)
(0.006, 0.006)
(0.0066, 0.0066)
→ Ссылка