Как округлить число до двух первых значащих цифр после запятой?
К своему стыду никак не могу найти способ округлять числа так (до двух первых значащих цифр после запятой):
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)