PGF计算不准确?

PGF计算不准确?

我正在尝试在 LaTeX 中实现发票计算并使用 PGF 作为计算方法。我遇到了一个奇怪的问题,似乎 PGF 计算不正确,我不确定是什么原因造成的。这是一个简单的例子:

\documentclass{standalone}

\usepackage{pgf}
\usepgflibrary{fpu}
\pgfkeys{
    /pgf/fpu=true,
    /pgf/number format/.cd,
    precision=2,
    fixed,
    fixed zerofill,
    use comma,
    1000 sep={.}
}

\begin{document}

\pgfmathparse{(1*800050)}\pgfmathprintnumber{\pgfmathresult}

\end{document}

为什么它应该输出 800.050,00 却输出 800.050,05?

答案1

我认为你不能依靠fpu库中的八位精确数字;引用手册第 54.3 节,

FPU 具有统一的相对精度,大约为 4 到 5 个正确数字。

您可以使用PGFfpexpl3并依赖它来打印数字:

\documentclass[margin=2bp,varwidth]{standalone}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \fpeval \fp_eval:n
\ExplSyntaxOff

\usepackage{pgf}
\pgfkeys{
    /pgf/number format/.cd,
    precision=2,
    fixed,
    fixed zerofill,
    use comma,
    1000 sep={.}
}

\begin{document}

\pgfmathprintnumber{\fpeval{1*800050}}

\pgfmathprintnumber{\fpeval{800050/4}}

\pgfmathprintnumber{\fpeval{800050/8}}

\end{document}

在此处输入图片描述

答案2

如果您不介意编译的话lualatex,那么您可以利用的数学功能lua

\documentclass[border=5]{standalone}
\usepackage{pgf,pgffor}
\def\luamath#1{\edef\luamathresult{\directlua{tex.write("" .. #1)}}}
\pgfkeys{
    /pgf/number format/.cd,
    precision=2,
    fixed,
    fixed zerofill,
    use comma,
    1000 sep={.}
}
\begin{document}
\parbox{.75in}{
  \foreach \i in {1,...,10}{
    \luamath{800050/\i}\pgfmathprintnumber{\luamathresult}\\
  }
}
\end{document}

在此处输入图片描述

相关内容