我需要做一些简单的计算,例如:
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\begin{document}
\pgfmathparse{1*0.4}\pgfmathresult
\pgfmathparse{2*0.4}\pgfmathresult
\pgfmathparse{3*0.4}\pgfmathresult
\pgfmathparse{4*0.4}\pgfmathresult
\pgfmathparse{5*0.4}\pgfmathresult
\pgfmathparse{15*0.4}\pgfmathresult
\end{document}
等等,假设我需要对 1 到 60 之间的所有数字执行此操作。
我如何得到正确的结果?实际上,唯一有效的是第一个 mathparse,在其余情况下我得到了奇怪的数字。
答案1
TeX 并不擅长浮点运算:不过有几种可用的实现。举几个例子。首先,你可以激活 TikZ FPU 代码:
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usetikzlibrary{fpu}
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
\begin{document}
\pgfmathparse{1*0.4}\pgfmathresult
\pgfmathparse{2*0.4}\pgfmathresult
\pgfmathparse{3*0.4}\pgfmathresult
\pgfmathparse{4*0.4}\pgfmathresult
\pgfmathparse{5*0.4}\pgfmathresult
\pgfmathparse{15*0.4}\pgfmathresult
\end{document}
或者再次使用 TikZ,您可以使用定点代码fp
:
\documentclass[a4paper,10pt]{article}
\usepackage{fp,tikz}
\usetikzlibrary{fixedpointarithmetic}
\pgfkeys{/pgf/fixed point arithmetic}
\begin{document}
\pgfmathparse{1*0.4}\pgfmathresult
\pgfmathparse{2*0.4}\pgfmathresult
\pgfmathparse{3*0.4}\pgfmathresult
\pgfmathparse{4*0.4}\pgfmathresult
\pgfmathparse{5*0.4}\pgfmathresult
\pgfmathparse{15*0.4}\pgfmathresult
\end{document}
或者,您可以使用 LaTeX3 FPU:
\documentclass[a4paper,10pt]{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \fpeval \fp_eval:n
\ExplSyntaxOff
\begin{document}
\fpeval{1*0.4}
\fpeval{2*0.4}
\fpeval{3*0.4}
\fpeval{4*0.4}
\fpeval{5*0.4}
\fpeval{15*0.4}
\end{document}