Python:带上标指数的科学记数法
Python: scientific notation with superscript exponent
我正在尝试使用以 10 为底的指数来格式化科学记数法中的数字,例如将 0.00123 写为 1.23x10–3,使用 python 3.
我发现了这个打印 1.23x10^-3 的好函数,但是如何用上标替换插入符指数?
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) # removed leading "+" and strips leading zeros too.
return a + "x10^" + str(b)
print(sci_notation(0.001234, sig_fig=2)) # Outputs 1.23x10^-3
函数修改自。
我试图合并 的答案来格式化上标,但我不确定 sympy 如何处理变量:
from sympy import pretty_print as pp, latex
from sympy.abc import a, b, n
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) #removed leading "+" and strips leading zeros too.
b = str(b)
expr = a + "x10"**b #Here's my problem
pp(expr) # default
pp(expr, use_unicode=True)
return latex(expr)
print(latex(sci_notation(0.001234, sig_fig=2)))
此returns:类型错误:** 或 pow() 不支持的操作数类型:'str' 和 'int'
这是一个简单的解决方案:
def SuperScriptinate(number):
return number.replace('0','⁰').replace('1','¹').replace('2','²').replace('3','³').replace('4','⁴').replace('5','⁵').replace('6','⁶').replace('7','⁷').replace('8','⁸').replace('9','⁹').replace('-','⁻')
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) # removed leading "+" and strips leading zeros too.
return a + "x10^" + SuperScriptinate(str(b))
我认为你的主要问题是how can the caret-exponent be replaced with a superscript?
如果您在 Jupyter notebook 中使用 python,有一个简单的方法:
from IPython.display import display, Math, Latex
# if the number is in scientific format already
display(Math('2.14e-6'.replace('e', r'\times 10^{') + '}'))
# if it is not:
d = "%e" % (number)
# then use the above form: display(Math(d.replace('e', r'\times ...
scinot 包以科学计数法格式化数字
import scinot as sn
a=4.7e-8
print(scinot.format(a))
4.7 × 10⁻⁸
或在字符串中
print('The value is {0:s}'.format(scinot.format(a)))
The value is 4.7 × 10⁻⁸
我正在尝试使用以 10 为底的指数来格式化科学记数法中的数字,例如将 0.00123 写为 1.23x10–3,使用 python 3.
我发现了这个打印 1.23x10^-3 的好函数,但是如何用上标替换插入符指数?
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) # removed leading "+" and strips leading zeros too.
return a + "x10^" + str(b)
print(sci_notation(0.001234, sig_fig=2)) # Outputs 1.23x10^-3
函数修改自
我试图合并 的答案来格式化上标,但我不确定 sympy 如何处理变量:
from sympy import pretty_print as pp, latex
from sympy.abc import a, b, n
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) #removed leading "+" and strips leading zeros too.
b = str(b)
expr = a + "x10"**b #Here's my problem
pp(expr) # default
pp(expr, use_unicode=True)
return latex(expr)
print(latex(sci_notation(0.001234, sig_fig=2)))
此returns:类型错误:** 或 pow() 不支持的操作数类型:'str' 和 'int'
这是一个简单的解决方案:
def SuperScriptinate(number):
return number.replace('0','⁰').replace('1','¹').replace('2','²').replace('3','³').replace('4','⁴').replace('5','⁵').replace('6','⁶').replace('7','⁷').replace('8','⁸').replace('9','⁹').replace('-','⁻')
def sci_notation(number, sig_fig=2):
ret_string = "{0:.{1:d}e}".format(number, sig_fig)
a,b = ret_string.split("e")
b = int(b) # removed leading "+" and strips leading zeros too.
return a + "x10^" + SuperScriptinate(str(b))
我认为你的主要问题是how can the caret-exponent be replaced with a superscript?
如果您在 Jupyter notebook 中使用 python,有一个简单的方法:
from IPython.display import display, Math, Latex
# if the number is in scientific format already
display(Math('2.14e-6'.replace('e', r'\times 10^{') + '}'))
# if it is not:
d = "%e" % (number)
# then use the above form: display(Math(d.replace('e', r'\times ...
scinot 包以科学计数法格式化数字
import scinot as sn
a=4.7e-8
print(scinot.format(a))
4.7 × 10⁻⁸
或在字符串中
print('The value is {0:s}'.format(scinot.format(a)))
The value is 4.7 × 10⁻⁸