从 Python 中的指数中提取数字

extract number from exponent in Python

大家好/Python大师

我想知道如何完成以下任务,到目前为止我一直无法完成。

这是我的:

Q1 = 20e-6

现在这是一个指数数,如果您按原样打印 (Q1),它将显示:2e-5,这很好。从数学上讲。

但是,这是我想用它做的事情:

我希望 Q1 只打印数字 20。然后根据这是否是 e-6 打印 uC 或者如果是 e-9 打印 nC。

为了更好地理解,这里有一个例子:

Q1=20e-6

当我运行 print(Q1) 显示:20uC.

Q2=20e-9

当我运行 print(Q2) 显示:20nC.

你能帮我解决这个问题吗?

你可以尝试拆分字符串:

'20e-9'.split('e')

给予

['20', '-9']

从那时起,您可以在这些值之间插入任何您想要的内容:

('u' if int(a[1]) > 0 else 'n').join(a)

(含 a = '20e-9'.split('e')

只需使用 str.replace:

替换指数
q1 = 'XXXXXX'
q1 = q1.replace('e-9', 'nC').replace('e-6', 'uC')
print(q1)

你不能。您正在寻找的行为称为 "monkey patching"。这对于 int 和 float 是不允许的。

可以参考这个Whosebug question

我能想到的唯一方法是创建一个扩展 float 的 class,然后根据您的要求实现一个显示的 __str__ 方法。

--------更多解释-----

如果你输入

Q1 = 20e-6

在 python shell 然后

type(Q1) 你会得到一个

float

所以基本上你的Q1被python类型系统

认为是浮动的

当你输入 print(Q1) float 的 _str__ 方法被调用

扩展核心的过程 class 是 "monkey patch" 的一个例子,这就是我所指的。

现在的问题是你不能"monkey patch"(或者如果你愿意的话可以扩展)核心class在python中(你可以在某些语言中,比如在Ruby).

[int、float 等是核心 classes 并用 C 编写,用于最常见的 python 发行版。]

那你是怎么解决的呢?

你需要像这样创建一个新的class

class 指数(浮点数): def <strong>init</strong>(self, value): self.value = 值 def <code>__str__(自我): return "ok"

x = Exponent(10.0)
print(x) ==> "ok"

希望这对您有所帮助

我建议您使用 si-prefix

您可以使用 pip 安装它:

sudo pip install si-prefix

然后你可以使用这样的东西:

from si_prefix import si_format

# precision after the point
# char is the unity's char to be used
def get_format(a, char='C', precision=2):
    temp = si_format(a, precision)

    try:
        num, prefix = temp.split()
    except ValueError:
        num, prefix = temp , ''

    if '.' in num:
        aa, bb = num.split('.')
        if int(bb) == 0:
            num = aa

    if prefix:
        return num + ' ' + prefix + char
    else:
        return num


tests = [20e-6, 21.46e05, 33.32e-10, 0.5e03, 0.33e-2, 112.044e-6]
for k in tests:
    print get_format(k)

输出:

20 uC
2.15 MC
3.33 nC
500
3.30 mC
112.04 uC