如何在使用 \foreach 时消除浮点数

如何在使用 \foreach 时消除浮点数

我的问题很简单,我想为家庭作业构建一个数轴,并想出了以下代码:

\begin{tikzpicture}
\draw(0,0)--(16,0);
\foreach \x/\y in {0/0,1.6/0.2,...,16.2/2.1}
\draw(\x,0.2)--(\x,-0.2) node [below] {\y};
\end{tikzpicture}

这将产生以下输出: 在此处输入图片描述

前两个标记值没问题,但出于某些原因,\y得到的值是\x(这肯定不是我想要的)。我还想摆脱浮点不精确的问题。我该如何解决这个问题?

答案1

此代码也给出了良好的结果:

\documentclass[tikz,border=10pt]{standalone}

\begin{document}
    \begin{tikzpicture}[x=1cm,y=1cm]
        \draw(0,0)--(16,0);
        \foreach \x/\y in {0/{0},1.6/{.2},3.2/{.4},4.8/{.6},6.4/{.8},8/{1.0},9.6/{1.2},11.2/{1.4},12.8/{1.6},14.4/{1.8},16/{2.0}}{%
        \draw(\x,.1)--(\x,-.1) node [below] {\y};}
    \end{tikzpicture}
\end{document}

输出:

在此处输入图片描述

添加:按照 Qrrbrbilbel 的评论,您可以得到完全相同的结果。我添加了完整的代码:

\documentclass[tikz,border=10pt]{standalone}
\newcommand{\truncate}[2]{\fpeval{trunc(#1,#2)}}
\begin{document}
    \begin{tikzpicture}[x=1cm,y=1cm]
        \draw(0,0)--(16,0);
        \foreach \x in {0,1.6,...,16.1}
            \draw(\x,.1)--(\x,-.1) node [below] {\truncate{\x/8}{1}};
    \end{tikzpicture}
\end{document}

答案2

您会从该代码中发现大量错误,并且输出不可靠。

此外Z/PGF 在计算浮点数方面表现不佳,因此最好尽可能使用整数。这样\fpeval您就可以克服浮点数运算的弱点。

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[x=0.8cm]
\draw(0,0)--(16,0);
\foreach \y in {1,2,...,11}{
  \edef\x{\fpeval{(\y-1)*1.6}}
  \draw(\x,0.2)--(\x,-0.2) node [below] {\x};
}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容