我目前正在尝试实现一个稍微复杂的图形,其中我有一堆文件,它们都以某个参数的值命名,由其左侧填充的值表示。也就是说,我有:
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.45
055
035
0.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 节“基本转换函数”。