使用浮点计算

使用浮点计算

我想在我的文档中使用饼图并尝试了以下代码示例:http://www.texample.net/tikz/examples/pie-chart/

现在这似乎可以完美地处理整数值,但对于浮点数我会出现错误。

使用此代码

\begin{tikzpicture}[scale=3]

\newcounter{a}
\newcounter{b}
\foreach \p/\t in {1.5/type Windows, 10/type Linux}
  {
    \setcounter{a}{\value{b}}
    \addtocounter{b}{\p}
    \slice{\thea/100*360}
          {\theb/100*360}
          {\p\%}{\t}
}

\end{tikzpicture}

我收到此错误:

软件包 calc 错误:`.' 此时无效。请参阅 calc 软件包文档以了解解释。键入 H 可立即获得帮助。... l.17 }

所以我查看了文档,但没有找到任何关于此内容的信息。我还发现这个问题但使用\real{1.5}和也{1.5}无济于事。

答案1

计数器只接受整数值。

您可以使用 PGF 工具或expl3

\documentclass{article}

\usepackage{tikz}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\declarefpvar}{m}
 {
  \fp_new:c { g_pie_#1_fp }
 }
\NewDocumentCommand{\setfpvar}{mm}
 {
  \fp_gset:cn { g_pie_#1_fp } { #2 }
 }
\DeclareExpandableDocumentCommand{\usefpvar}{m}
 {
  \fp_use:c { g_pie_#1_fp }
 }
\ExplSyntaxOff

\newcommand{\slice}[4]{%
  \pgfmathsetmacro\midangle{0.5*#1+0.5*#2}
  % slice
  \draw[thick,fill=black!10] (0,0) -- (#1:1) arc (#1:#2:1) -- cycle;
  % outer label
  \node[label=\midangle:#4] at (\midangle:1) {};
  % inner label
  \pgfmathsetmacro\temp{min((#2-#1-10)/110*(-0.3),0)}
  \pgfmathsetmacro\innerpos{max(\temp,-0.5) + 0.8}
  \node at (\midangle:\innerpos) {#3};
}

\declarefpvar{a}
\declarefpvar{b}

\begin{document}
\begin{tikzpicture}[scale=3]

\foreach \p/\t in {1.5/type Windows, 10/type Linux}
  {
   \setfpvar{a}{\usefpvar{b}}
   \setfpvar{b}{\p+\usefpvar{b}}
    \slice{\usefpvar{a}/100*360}
          {\usefpvar{b}/100*360}
          {\tiny\p\%}{\t}
  }

\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容