¿Cómo imprimir un número con una base de exponente predefinida (pgf)?

¿Cómo imprimir un número con una base de exponente predefinida (pgf)?

¿Cómo puedo imprimir un número con una base de potencia predefinida de 10 (base del exponente) 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}

ingrese la descripción de la imagen aquí

Respuesta1

Esto hace algo así. Le permite establecer un exponente fijo. No me atreví a tocar la \pgfmathprintnumbermacro, así que escribí una 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}

ingrese la descripción de la imagen aquí

Respuesta2

Con la ayuda de siunitx. Tenemos que convertir el fpunúmero a notación científica (la salida del fpu de pgf es un poco extraña para otros paquetes).

\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}

ingrese la descripción de la imagen aquí

Puede cambiar el símbolo del producto antes del exponente exponent-product=\cdoten las opciones de \num(o siunitx).

EDITAR:Como sugiere egreg, se podría usar xfp, que utiliza el motor de punto flotante de LaTeX3, para los 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}

información relacionada