大家好/ Python大师
我想知道如何完成以下任务,到目前为止我一直无法完成。
这就是我所拥有的:
Q1 = 20e-6
现在这是一个指数数字,如果你打印(Q1)就会显示:2e-5这很好。从数学角度讲。
但是,这就是我想用它做的事情:
我希望Q1只打印20号。根据是否是e-6然后打印uC或者如果这个e-9打印nC。
以下是一个更好理解的例子:
Q1 = 20E-6
当我运行print(Q1)show:20uC。
Q 2 = 20E-9
当我运行print(Q2)show:20nC。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
只需使用str.replace替换指数:
q1 = 'XXXXXX'
q1 = q1.replace('e-9', 'nC').replace('e-6', 'uC')
print(q1)
答案 1 :(得分:0)
您可以尝试拆分字符串:
'20e-9'.split('e')
给出
['20', '-9']
从那时起,您可以在这些值之间插入任何内容:
('u' if int(a[1]) > 0 else 'n').join(a)
(a = '20e-9'.split('e')
)
答案 2 :(得分:0)
你做不到。您正在寻找的行为称为“猴子修补”。 int和float不允许这样做。
您可以参考此stackoverflow question
我能想到的唯一方法是创建一个扩展float的类,然后实现一个__str__
方法,根据您的要求显示。
-------更多解释-----
如果您输入
Q1 = 20e-6
在python shell中,然后
type(Q1)
你会得到一个
float
所以基本上你的Q1被python类型系统视为浮动
键入print(Q1)
float的_str__
方法称为
扩展核心类的过程就是“猴子补丁”的一个例子,这就是我所说的。
现在问题是你不能在python中使用“猴子补丁”(或者如果你愿意的话扩展它们)(你可以在某些语言中使用Ruby)。
[int,float等是核心类,用C语言编写,用于最常见的python发行版。]
那你怎么解决呢?
你需要创建一个像这样的新类
class Exponent(float):
def init(self, value):
self.value = value
def
__str__
(self):
return "ok"
__str__
希望这会有所帮助
答案 3 :(得分:0)
我建议您使用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