如果我执行以下操作:
print("{:.0e}".format(2500000000000000000))
然后我出去了:2e + 18
如何将此输出改为2x10 ^ 18(指数正确上标)。
我知道使用ticker你可以使用更改输出的MatText = True,但这似乎不适用于字符串格式。
编辑:对不起,我试图简化这个问题,认为它可以解决。我试图将此更改转换为轴上的刻度线: xticklabels[-1] = '{0:.0e}'.format(xticklabels[-1]).replace('e+','x10^')
这符合@progo的建议,但并不代表指数。
答案 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⁻⁹