编辑

编辑

我正在制作一个宏来帮助孩子们估算 5 的 34.1%。

我无法让计算输出具有适当(最小)小数位的精确数字。相反,PGF 显示 5 的 40% 是 1.99997

我该如何解决这个问题?将来我可能需要指定小数点后的最大位数时该怎么办?

\documentclass{article}

\usepackage{tikz}
\usepackage{pgf}
\usepackage[margin=1.5cm]{geometry}

\title{Percents of Whole Numbers on a Number Line}
\date{}
\author{}

\setlength{\parindent}{0pt}

\newcommand{\percentA}[2]
{
\begin{tikzpicture}[xscale=18]
 \foreach \x in {0,1,...,#1}
  {
   \node at (\x/#1,0.45) {\x}; % Whole numbers
   \draw [very thick] (\x/#1,0)--(\x/#1,0.25);  % Whole number tick marks
  }

 \draw[very thick] (0,0)--(1,0); % x axis

 \foreach \x in {0,...,100} % Hundredths tick marks
  \draw (\x/100,-0.1)--(\x/100,0);

 \foreach \x in {0,1,2,...,10}
  {
   \draw[thick] (\x/10,-0.18)--(\x/10,0); % Tenths tick marks
   \pgfmathsetmacro{\tenspercents}{int(\x*10)}   
   \node at (\x/10,-0.6) {\tenspercents \%};
   \node at (\x/10,-1) {of #1};
   \pgfmathsetmacro{\result}{\tenspercents/100*#1,}   
   \node at (\x/10,-1.4) {is \result};
  }  
\end{tikzpicture}
}

\begin{document}

\pagestyle{empty}

\maketitle

\percentA{5}

\end{document}

该代码产生如下结果:

5 的百分比

答案1

正如我在回答您的另一个问题时所说,您希望格式化数字以使其漂亮地打印出来。在这种情况下,我猜默认格式会很合适,但您显然可以根据您的特定需求进行调整。

漂亮打印的数字线

\documentclass[border=10pt,multi,tikz]{standalone}
\newcommand{\percentA}[2]
{%
\begin{tikzpicture}[xscale=18]
 \foreach \x in {0,1,...,#2}
  {
   \node at (\x/#2,0.45) {\x}; % Whole numbers
   \draw [very thick] (\x/#2,0)--(\x/#2,0.25);  % Whole number tick marks
  }

 \draw[very thick] (0,0)--(1,0); % x axis

 \foreach \x in {0,...,100} % Hundredths tick marks
  \draw (\x/100,-0.1)--(\x/100,0);

 \foreach \x in {0,1,2,...,10}
  {
   \draw[thick] (\x/10,-0.18)--(\x/10,0); % Tenths tick marks
   \pgfmathsetmacro{\tenspercents}{int(\x*10)}
   \node at (\x/10,-0.6) {\tenspercents \%};
   \node at (\x/10,-1) {of #2};
   \pgfmathsetmacro{\myresult}{\tenspercents/100*#2}
   \node at (\x/10,-1.4) {is \pgfmathprintnumber{\myresult}};
  }
\end{tikzpicture}%
}
\begin{document}
\percentA{20}{5}
\end{document}

默认的数学公式永远不会准确。例如,如果您需要准确度,可以使用浮点数。但我怀疑这对于二年级数学来说是否真的有必要(假设这仍然是针对二年级学生的)。只需打印数字以使其更漂亮就足够了。

编辑

我的答案的这一部分使用了您稍后发布的替代版本的更正版本\percentA。与第一个版本不同,这只使用 1 个参数,您的示例只给出了 1 个参数。不幸的是,与第一个版本一样,它仍然需要 2 个参数。

还请注意,这两个版本都引入了虚假空格。我在上面更正了这个问题,并在下面注释了替代版本的更正。

还要注意,您不应在希望解析为数字的参数中包含逗号pgfmath。这会产生问题。例如,数字之后无法正确格式化,因为它包含外来内容。再次,我在上面更正了这个问题,并在下面的注释中重复了更正。

下面的代码旨在演示几种最适用于二年级学生的格式化数字的方法pgfmath。有关其他选项(例如科学格式),请参阅 TikZ 的手册中详细描述了各个选项。

以下是输出

\percentA{5}

对于 的单一定义\percentA{}。也就是说,打印的数字在每种情况下都是相同的。所有更改都是 的相关设置/pgf/number format,如下面的代码所示。

二年级学生可能感兴趣的各种数字格式

请记住: 所保存的一系列值\result对于每条数轴都是相同的,因为 的定义\percentA{}保持不变。\pgfmathprintnumber{}当将一系列值\result作为参数输入时,宏的效果会发生变化。

\documentclass[border=10pt,multi,tikz]{standalone}
\newcommand{\percentA}[1]% if you are only going to give one argument, don't say you'll give two
{% avoid introducing spurious spaces
\begin{tikzpicture}[xscale=18]
 \foreach \x in {0,1,...,#1}
  {
   \node at (\x/#1,0.45) {\x}; % Whole numbers
   \draw [very thick] (\x/#1,0)--(\x/#1,0.25);  % Whole number tick marks
  }

 \draw[very thick] (0,0)--(1,0); % x axis

 \foreach \x in {0,...,100} % Hundredths tick marks
  \draw (\x/100,-0.1)--(\x/100,0);

 \foreach \x in {0,1,2,...,10}
  {
   \draw[thick] (\x/10,-0.18)--(\x/10,0); % Tenths tick marks
   \pgfmathsetmacro{\tenspercents}{int(\x*10)}
   \node at (\x/10,-0.6) {\tenspercents \%};
   \node at (\x/10,-1) {of #1};
   \pgfmathsetmacro{\result}{\tenspercents/100*#1}% comma is not part of number!!
   \node at (\x/10,-1.4) {is \pgfmathprintnumber{\result}};
  }
\end{tikzpicture}% avoid introducing spurious spaces
}
\begin{document}
\percentA{5}
\tikzset{%
  /pgf/number format/.cd,
  fixed,
  precision=2,
}
\percentA{5}
\tikzset{%
  /pgf/number format/.cd,
  fixed zerofill,
}
\percentA{5}
\tikzset{%
  /pgf/number format/.cd,
  precision=0,
}
\percentA{5}
\tikzset{%
  /pgf/number format/.cd,
  int trunc,
}
\percentA{5}
\end{document}

答案2

另一种方法需要lualatex进行百分比计算。还有一些其他优化(不需要lualatex):

\RequirePackage{luatex85}% Currently needed in TeXLive 2016
\documentclass[border=5,varwidth=20cm]{standalone}
\usepackage{tikz}
\newcommand{\percentA}[2][1]
{%
\begin{tikzpicture}[xscale=18]
\foreach \x in {0,#1,...,#2}
  \draw [very thick] (\x/#2,0)--(\x/#2,0.25)
    node [above] {\x};  % Whole number tick marks

 \draw[very thick] (0,0)--(1,0); % x axis

 \foreach \x in {0,...,100} % Hundredths tick marks
   \draw (\x/100,-0.1)--(\x/100,0);

 \foreach \x in {0,1,2,...,10}
 {
   \edef\tenspercents{\directlua{tex.print(\x*10)}}
   \edef\myresult{\directlua{tex.print(\tenspercents/100*#2)}}
   \draw[thick] (\x/10,0)--(\x/10,-0.18)
     node [at end, below, align=center]
       {\tenspercents \% \\ of #2 \\ is \myresult};
  }
\end{tikzpicture}%
}
\begin{document}
\foreach \p/\s in {5/1, 10/1, 15/1, 20/2, 50/5, 400/50}{
\percentA[\s]{\p}
\\[1em]
}
\end{document} 

在此处输入图片描述

相关内容