Como imprimir um número com base expoente predefinida (pgf)?

Como imprimir um número com base expoente predefinida (pgf)?

Como posso imprimir um número com alguma base predefinida de potência de 10 (base expoente) usando\pgfmathprintnumber

\documentclass[border=1cm]{standalone}
\usepackage{pgf}
\usepgflibrary{fpu}

\begin{document}
    \pgfset{fpu=true}
    \pgfmathsetmacro{\en}{1/sqrt(2e-3*2e-6)/(2*pi)}
    \pgfset{fpu=false}
    \pgfmathprintnumber[]{\en} % need 25 * 10^2
\end{document}

insira a descrição da imagem aqui

Responder1

Isso faz algo assim. Ele permite que você defina um expoente fixo. Não me atrevi a tocar na \pgfmathprintnumbermacro, então escrevi uma macro \pgfmathprintnumberFE.

\documentclass[border=1cm]{standalone}
\usepackage{pgf}
\usepgflibrary{fpu}
\pgfkeys{/pgf/number format/.cd,custom exponent/.initial=2}%
\newcommand{\pgfmathprintnumberFE}[2][]{%
\begingroup
\pgfkeys{/pgf/number format/.cd,fixed,precision=0,#1}%
\pgfset{fpu=true}%
\pgfmathparse{#2}%
\pgfmathfloattomacro{\pgfmathresult}{\F}{\M}{\E}%
\pgfset{fpu=false}%
\pgfmathtruncatemacro{\redexp}{\E-\pgfkeysvalueof{/pgf/number format/custom exponent}}%
\ifnum\pgfkeysvalueof{/pgf/number format/custom exponent}=0
\ensuremath{\pgfmathprintnumber{\M}}%
\else
\pgfmathsetmacro{\newnum}{\M*pow(10,\redexp)}%
\ensuremath{\pgfmathprintnumber{\newnum}\cdot10^{\pgfkeysvalueof{/pgf/number format/custom exponent}}}%
\fi
\endgroup}
\begin{document}
    \pgfmathprintnumberFE[custom exponent=2]{1/sqrt(2e-3*2e-6)/(2*pi)}

    \pgfmathprintnumberFE[custom exponent=1]{1/sqrt(2e-3*2e-6)/(2*pi)}

    \pgfmathprintnumberFE[custom exponent=4]{123456}
\end{document}

insira a descrição da imagem aqui

Responder2

Com a ajuda de siunitx. Temos que converter o fpunúmero para notação científica (a saída do fpu do pgf é um pouco estranha para outros pacotes).

\documentclass[border=1cm]{standalone}
\usepackage{pgf}
\usepgflibrary{fpu}
\usepackage{siunitx}

\newcommand\fixedexponent[2]
  {%
    \num
      [%
        fixed-exponent=#1,
        scientific-notation=fixed,
        round-mode=places,
        round-precision=0,
      ]{#2}%
  }

\begin{document}
    \pgfset{fpu=true}
    \pgfmathsetmacro{\en}{1/sqrt(2e-3*2e-6)/(2*pi)}
    \pgfset{fpu=false}
    \pgfmathprintnumber[]{\en} % need 25 * 10^2
    % convert the number to scientific notation
    \pgfset{fpu=true,fpu/output format=sci}
    \pgfmathsetmacro\en{\en}
    \pgfset{fpu=false}
    \fixedexponent{2}{\en}
\end{document}

insira a descrição da imagem aqui

Você pode alterar o símbolo do produto antes do expoente exponent-product=\cdotnas opções de \num(ou siunitx).

EDITAR:Conforme sugerido por egreg pode-se usar o xfp, que utiliza o mecanismo de ponto flutuante do LaTeX3, para os cálculos.

\documentclass[border=1cm]{standalone}

\usepackage{siunitx}
\usepackage{xfp}

\newcommand\fixedexponent[2]
  {%
    \num
      [%
        fixed-exponent=#1,
        scientific-notation=fixed,
        round-mode=places,
        round-precision=0,
      ]{\fpeval{#2}}%
  }

\begin{document}
    \fixedexponent{2}{1/sqrt(2e-3*2e-6)/(2*pi)}
\end{document}

informação relacionada