从 Python 中的指数中提取数字



大家好/Python Gurus

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

这是我所拥有的:

Q1 = 20e-6

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

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

我希望 Q1 只打印数字 20。并且基于这是否是 e-6 然后打印 uC 或者如果这个 e-9 打印 nC。

下面是一个示例,以便更好地理解:

Q1=20e-6

当我运行打印(Q1)显示:20uC。

Q2=20e-9

当我运行打印(Q2)显示:20nC。

你能帮我弄清楚吗?

只需使用 str.rereplace 替换指数:

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

我建议你使用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

你可以尝试通过拆分字符串:

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

['20', '-9']

从那里开始,您可以在这些值之间插入所需的任何内容:

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

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

你不能。您正在寻找的行为称为"猴子修补"。这不适用于 int 和 float。

你可以参考这个堆栈溢出问题

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

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

如果您键入

Q1 = 20e-6

在 Python Shell 中,然后

type(Q1)你会得到一个

float

所以基本上你的Q1被python类型系统认为是浮动

的当您键入打印(Q1)时 浮点数的_str__方法称为

扩展核心类的过程是"猴子补丁"的一个例子,这就是我所参考的。

现在的问题是你不能在python中"猴子补丁"(或者如果你愿意的话可以扩展)核心类(你可以在Ruby等语言中

)。[int,float等是核心类,用C编写,用于最常见的python发行版。

那么如何解决呢?

你需要创建一个这样的新类

class Exponent(float): definit(self, value): self.value = value def__str__(个体经营): 返回"确定">

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

希望这有帮助

最新更新