Оформление чисел с плавающей запятой в Python
Для оформления задачи мне нужно представить числа в определенном формате. Например число
-7.816585631337434e-12 нужно представить в виде -7.816 * 10^12
Для положительных чисел без отрицательной степени у "е" я использовал метод toFixed()
def toFixed(numObj, digits=0):
return f"{numObj:.{digits}f}"
Как я могу реализовать нужный вид для числа, которое я представил выше?
Ответы (3 шт):
Автор решения: nightflash
→ Ссылка
Вот, например так:
f = -7.816585631337434e-12
s = str(f)
dp = s.find(".")
base = s[:dp + 4]
ep = s.find("e")
m = s[ep + 1:]
if int(m) < 0:
m = "(" + m + ")"
print(base, "*", "10^" + m)
вернёт результат
-7.816 * 10^(-12)
Автор решения: insolor
→ Ссылка
import math
def pow_format(num, digits=3):
ex = int(math.log10(abs(num)))
# Если число по модулю меньше 10, то вывести без экспоненты
if ex == 0:
return f"{num:.{digits}f}"
m = num / 10 ** ex
if abs(m) < 1:
m *= 10
ex -= 1
str_ex = str(ex) if ex > 0 else f"({ex})"
return f"{m:.{digits}f} * 10^{str_ex}"
print(pow_format(0.1)) # 1.000 * 10^(-1)
print(pow_format(-7.816585631337434e-12)) # -7.817 * 10^(-12)
print(pow_format(-7.816585631337434e12)) # -7.817 * 10^12
print(pow_format(5)) # 5.000