使用 calc 包时我得到了一个意外的结果。我只是尝试将实际值“10.01”乘以整数值“10000”,然后将结果存储在计数器中。但返回的值不是预期的“100100”,而是“100099”。
我该怎么做才能避免 calc 包出现一些错误?
以下是非常简单的使用代码:
\documentclass{article}
\usepackage{calc}
\newcounter{r}
\begin{document}
\setcounter{r}{10000 * \real{10.01}}
\ther
\end{document}
谢谢。
答案1
TeX 使用定点二进制算术,并且calc
使用这种不能保证高精度的算术。
使用浮点数的实现可以获得更好的结果,例如expl3
:
\documentclass{article}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\roundtointeger}{m}
{
\fp_eval:n { round ( #1, 0 ) }
}
\ExplSyntaxOff
\newcounter{r}
\begin{document}
\setcounter{r}{\roundtointeger{10000 * 10.01}}
\ther
\end{document}
答案2
感谢 egreg 的回答,我找到了另一个可以解决我的问题的软件包:
\documentclass{article}
\usepackage{fp}
\newcounter{r}
\begin{document}
\FPeval{\result}{round(10000 * 10.01,0)}
\setcounter{r}{\result}
\ther
\end{document}
感谢您的帮助。