Python: научная запись с показателем верхнего индекса - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь отформатировать числа в научной нотации с показателями основания 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

Функция изменена с https://stackoverflow.com/a/29261252/8542513.

Я пытался включитьответ от https://stackoverflow.com/a/8651690/8542513 для форматирования верхнего индекса, но я не уверен, как 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))) 

Возвращает: TypeError: неподдерживаемый тип (типы) операндов для ** или pow(): 'str' и 'int'

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

Я полагаю, что ваша основная проблема how can the caret-exponent be replaced with a superscript?

Если вы используете python в ноутбуке Jupyter, есть простой способ:

  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 ...
0 голосов
/ 30 ноября 2018

Вот простое решение:

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))
...