pgfmathparse 不能正确解析左填充零的整数?

pgfmathparse 不能正确解析左填充零的整数?

我目前正在尝试实现一个稍微复杂的图形,其中我有一堆文件,它们都以某个参数的值命名,由其左侧填充的值表示。也就是说,我有:

my_file_055.txt (参数 = 0.55)

my_file_105.txt(参数 = 1.05)

my_file_155.txt (参数 = 1.55)

因此,我设置为在 上生成一个循环{055, 105, 155},并认为使用 \pgfmathparse{#1/100}\pgfmathresult 会给我正确的结果。这适用于105和(舍入问题除外),但给了155我 的错误值。这确实与其他零填充值一起出现,例如这给了我。0.450550350.29

M(N)WE:

\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.13}

\begin{document}
  \begin{tikzpicture}
    \draw (0, 0) node {\pgfmathparse{055/100}\pgfmathresult};
  \end{tikzpicture}
\end{document}

如何得到正确的值0.35

答案1

摘自 pgf 手册(第 89.1.1 节“命令”,第 923 页,pgfmanual v3.0.1a):”带有零前缀的整数(当然不包括零本身)被解释为八进制数,并自动转换为十进制。

因此,使用 pgfmath,您不能使用带有零前缀的十进制数!

答案2

这里可以使用 LaTeX3 FPU,不需要中间值步骤

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \fpeval \fp_eval:n
\ExplSyntaxOff
\pgfplotsset{compat=1.13}

\begin{document}
  \begin{tikzpicture}
    \draw (0, 0) node {\fpeval{059/100}};
  \end{tikzpicture}
\end{document}

答案3

一种解决方案是强制将数字解释为十进制数字。以下代码利用了\pgfmathdectobase此方法:

\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.13}

\begin{document}
   \begin{tikzpicture}
      \pgfmathdectobase\mynumber{055}{10}
      \draw (0, 0) node {\pgfmathparse{\mynumber/100}\pgfmathresult};
   \end{tikzpicture}
\end{document}

有关更多信息,请参阅 pgf 手册第 71.2.7 节“基本转换函数”。

相关内容