是否有可用于存储非整数的计数器或变量?

是否有可用于存储非整数的计数器或变量?

我正在处理一份发票文件,该文件在发票项目的几行之后的末尾有一个“总计”。因此,我需要对每行的总数进行连续计数。使用传统的\newcounter\addtocounter计数器不起作用,因为它不接受小数,而货币通常有小数。

创建和维护一个可以添加包含小数的数字的变量的推荐方法是什么?

答案1

expl3这是一个使用语法及其变量的非常“简单”的方法\fp_...

由于问题不是完全清楚,我提供了一些用于加减以及重置和显示总和的宏。

\documentclass{article}

\usepackage{xparse}


\ExplSyntaxOn
\fp_new:N \g_total_sum_fp

\NewDocumentCommand{\AddValue}{m}{
  \fp_gadd:Nn \g_total_sum_fp {#1}
}

\NewDocumentCommand{\SubValue}{m}{
  \fp_gsub:Nn \g_total_sum_fp {#1}
}


\NewDocumentCommand{\ResetSum}{}{
  \fp_zero:N \g_total_sum_fp 
}


\NewDocumentCommand{\DisplaySum}{}{
  \fp_to_decimal:N \g_total_sum_fp
}

\ExplSyntaxOff


\begin{document}


\AddValue{4.5}

\DisplaySum

\AddValue{10.5}
\DisplaySum

\AddValue{2}
\DisplaySum

\AddValue{17}
\DisplaySum

\AddValue{-2}
\DisplaySum

\ResetSum
\DisplaySum

\end{document}

在此处输入图片描述

您可以在此处找到相关问题:数字格式化、addtocounter 和 calc 包

答案2

您可以使用普通的 TeX 计数器来计算金钱。该计数器以便士为单位存储数值。

\newcount\tmpvar
\newcount\myvar 

\def\addvar#1#2 {\let\tmp=#1\addvarA #2.\end}
\def\addvarA#1.#2\end{\advance\tmp by #100
   \ifx;#2;\else\ifx.#2\else\addvarB#1.#2\fi\fi}
\def\addvarB#1.#2#3.{\advance\tmp by \ifnum#1<0-\fi #2#3\ifx;#3;0\fi\space}
\def\printvar#1{\tmpvar=#1%
   \divide\tmpvar by100
   \ifnum\tmpvar=0 \ifnum#1<0-\fi\fi \the\tmpvar
   \multiply\tmpvar by-100 \advance\tmpvar by#1%
   \ifnum\tmpvar=0 \else.%
      \ifnum\tmpvar<0 \tmpvar=-\tmpvar \fi
      \ifnum\tmpvar<10 0\fi \the\tmpvar
   \fi
}

% test:

\myvar=0
\addvar\myvar  3.45
\addvar\myvar -5
\addvar\myvar  1.5
\printvar\myvar  % -0.05 is printed

\myvar=0
\addvar\myvar  2.3
\printvar\myvar  % 2.3 is printed

\myvar=0
\addvar\myvar 123.
\addvar\myvar   0.01
\printvar\myvar  % 123.01 is printed

相关内容