简单地在 fpeval 后用逗号替换点

简单地在 fpeval 后用逗号替换点

我想简单地用逗号替换 fpeval 结果中的点。非常简单,没有附加功能,因此 siunitx 和 numprint 等无法工作,因为它们正在修改和添加太多内容。以下代码应该可以正常工作而不会出现警告:

\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{pgf}
\usepackage{xfp}
\usepackage{hyperref}
\begin{document}
    \pgfmathsetmacro{\x}{1.2}
    \pgfmathsetmacro{\y}{3.4}
    \begin{Form}
%       \TextField[value=\replaceDotWithComma{\fpeval{\x+\y}}]{\replaceDotWithComma{\fpeval{\x+\y}}}
        \TextField[value=\fpeval{\x+\y}]{\fpeval{\x+\y}}
    \end{Form}
\end{document}

答案1

\documentclass{article}
\ExplSyntaxOn
\cs_new:Npn \mich_convert_tocomma:n #1
  {
    \exp_args:Ne \tl_to_str:n
      { \str_map_function:nN {#1} \__mich_convert_tocomma:n }
  }
\cs_new:Npn \__mich_convert_tocomma:n #1
      {
        \int_compare:nNnTF { `#1 } = { `. }
          { , }
          { #1 }
      }
\cs_generate_variant:Nn  \mich_convert_tocomma:n {e}
\cs_set_eq:NN \tocomma \mich_convert_tocomma:e
\ExplSyntaxOff
\usepackage{pgf}
\usepackage{xfp}
\usepackage{hyperref}
\begin{document}
    \pgfmathsetmacro{\x}{1.2}
    \pgfmathsetmacro{\y}{3.4}
    \begin{Form}
%       \TextField[value=\replaceDotWithComma{\fpeval{\x+\y}}]{\replaceDotWithComma{\fpeval{\x+\y}}}
        \TextField[value=\tocomma{\fpeval{\x+\y}}]{\tocomma{\fpeval{\x+\y}}}
    \end{Form}
\end{document}

答案2

您可以覆盖内部打印功能,但这肯定会带来其他问题。特别是,这不是面向未来的,因为任何以双下划线 ( __) 开头的名称都可能随时更改或消失,恕不另行通知。

\documentclass{article}
\usepackage{xfp}

\ExplSyntaxOn

\cs_set:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4;
  {
    \exp_after:wN \__fp_trim_zeros:w \int_value:w
      \if_int_compare:w #2 > 0 \exp_stop_f:
        #2
      \fi:
      \exp_stop_f:
      #3{,}#4 ;
  }

\ExplSyntaxOff

\begin{document}

\fpeval{1.2 + 3.4}

\end{document}

相关内容