1

假设我有两个数字,v = 0.01342并且err = 0.0004。在科学记数法下,这将被写为(13.4 ± 0.4)e-3。是否有进行该转换的功能(可能在 scipy 上)?当然,重要的是数字而不是±符号。在网上搜索,我了解到有(是?)函数(s?)它吃一个数字来转换和一些所需的数字,然后他们吐出结果。这不是我要寻找的。我写过一次,但结果很丑。

4

2 回答 2

2

我不明白你最后几行的意思,但是当你有一个像你这样的特定输出时,你通常必须自己写。

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,则可以输入 ± 字符,但仅当您使用打印语句时,结果才会看起来很漂亮。

将之前的 return 语句替换为

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-13T14:24:22.480 回答
1

I don't know if this is exactly what you're looking for, but you can display numbers in scientific notation using .format

v = 0.01342
err = 0.0004

print ('({:.2e}'.format(float(v)) + ' +/- ' + '{:.2e}'.format(float(err)) + ')')

Will output the following:

(1.34e-02 +/- 4.00e-04)

the .2 of {:.2e} specifies the precision, which prevents any overly ugly numbers

于 2013-06-13T14:12:23.193 回答