미리 정의된 지수 기준(pgf)을 사용하여 숫자를 인쇄하는 방법은 무엇입니까?

미리 정의된 지수 기준(pgf)을 사용하여 숫자를 인쇄하는 방법은 무엇입니까?

다음을 사용하여 미리 정의된 10의 거듭제곱(지수 밑)으로 숫자를 인쇄하려면 어떻게 해야 합니까?\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}

여기에 이미지 설명을 입력하세요

답변1

이것은 그런 일을합니다. 고정 지수를 설정할 수 있습니다. 감히 매크로 를 건드릴 수가 없어서 \pgfmathprintnumber매크로를 썼습니다 \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}

여기에 이미지 설명을 입력하세요

답변2

의 도움으로 siunitx. 숫자를 과학적 표기법으로 변환해야 합니다 fpu(pgf의 fpu 출력은 다른 패키지에서는 약간 이상합니다).

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

여기에 이미지 설명을 입력하세요

(또는 ) exponent-product=\cdot옵션을 사용하여 지수 앞의 제품 기호를 변경할 수 있습니다 .\numsiunitx

편집하다:egreg가 제안한 대로 xfp계산을 위해 LaTeX3의 부동 소수점 엔진을 사용하는 를 사용할 수 있습니다.

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

관련 정보