¿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}
Respuesta1
Esto hace algo así. Le permite establecer un exponente fijo. No me atreví a tocar la \pgfmathprintnumber
macro, 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}
Respuesta2
Con la ayuda de siunitx
. Tenemos que convertir el fpu
nú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}
Puede cambiar el símbolo del producto antes del exponente exponent-product=\cdot
en 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}