在Python中将2e + 18转换为2x10 ^ 18

时间:2015-03-23 09:59:40

标签: python python-2.7

如果我执行以下操作:

print("{:.0e}".format(2500000000000000000))

然后我出去了:2e + 18

如何将此输出改为2x10 ^ 18(指数正确上标)。

我知道使用ticker你可以使用更改输出的MatText = True,但这似乎不适用于字符串格式。

编辑:对不起,我试图简化这个问题,认为它可以解决。我试图将此更改转换为轴上的刻度线:

    xticklabels[-1] = '{0:.0e}'.format(xticklabels[-1]).replace('e+','x10^')

这符合@progo的建议,但并不代表指数。

2 个答案:

答案 0 :(得分:6)

愚蠢的解决方案:

print("{0:.0e}".format(2500000000000000000).replace('e+', 'x10^'))
=> 2x10^18

TeX版本:

def to_TeX(num):
    num = "{0:.0e}".format(num)
    mantissa, exponent = num.split('e')
    exponent = int(exponent)
    return "{0} \times 10^{{{1}}}".format(mantissa, exponent)

>>> to_TeX(1.8e21)
'2 \times 10^{21}'

答案 1 :(得分:4)

这是 Python 2 / Python 3 解决方案。

# -*- coding: utf-8 -*
try:
    unicode
except:
    unicode = str

_superscripts = u'⁻⁰¹²³⁴⁵⁶⁷⁸⁹'
_superscript_map = dict(zip(map(ord, u'-0123456789'), _superscripts))

def to_fancy(number, fmt='e'):
    as_str = format(number, fmt)
    as_str, _, exponent = as_str.partition('e')
    if exponent: # will also print 10^0, add `and int(exponent)` to 
                 # not add x10^0 at all.
        exponent = unicode(int(exponent.replace('+', '')))
        exponent = exponent.translate(_superscript_map)
        as_str += u'×10' + exponent
    return as_str

>>> print(to_fancy(0.00000000321))
3.210000×10⁻⁹