大家好/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"
希望这有帮助