假设我有两个数字,v = 0.01342和err = 0.0004。在科学记数法下,这将被写为(13.4 ± 0.4)e-3。有没有一个函数可以进行这种转换(可能是在scipy上)?当然,重要的是数字,而不是±符号。在网上搜索,我了解到有(are?)函数(s?)它们吃一个要转换的数字和一些想要的数字,然后吐出结果。这不是我要找的。我写过一次,但结果很难看。
发布于 2013-06-13 22:24:22
我不明白最后几行是什么意思,但是当你有一个像你这样的特定输出时,你通常不得不写你自己的输出。
def sci_not(v,err,rnd=1):
power = - int(('%E' % v)[-3:])+1
return '({0} +/- {1})e{2}'.format(
round(v*10**power,rnd),round(err*10**power,rnd),power)这样就行了。
>>> v = .01342
>>> err = .0004
>>> sci_not(v,err)
(13.4 +/- 0.4)e3编辑:如果将字符串设置为unicode,则可以添加±字符,但只有在使用print语句时,结果才看起来很漂亮。
将前面的返回语句替换为
return u'({0} \u00B1 {1})e{2}'.format(
round(v*10**power,rnd),round(err*10**power,rnd),power)这将返回
>>> sci_not(v,err)
u'(13.4 \xb1 0.4)e3'
>>> print sci_not(v,err)
(13.4 ± 0.4)e3发布于 2013-06-13 22:12:23
我不知道这是否是您想要的,但是您可以使用.format以科学记数法显示数字
v = 0.01342
err = 0.0004
print ('({:.2e}'.format(float(v)) + ' +/- ' + '{:.2e}'.format(float(err)) + ')')将输出以下内容:
(1.34e-02 +/- 4.00e-04){:.2e}的.2指定了精度,这可以防止任何过于丑陋的数字
https://stackoverflow.com/questions/17088510
复制相似问题