我正在尝试在 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 个正确数字。
您可以使用PGFfp
库expl3
并依赖它来打印数字:
\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}