Name scoping issue (probably)
This happens because each entry in a tabular is typeset in its own group, and \FPadd
does a local assignment. You can globalize it as follows:
\def\item#1{%
\FPadd\0\total{#1}\global\let\total\0
$\FPprint{#1}$\\\\
}
\documentclass{article}
\usepackage[autolanguage]{numprint}
\usepackage{fp}
\FPset\total{0}
%
\def\Item#1{%
\FPadd\total\total{#1}
\xdef\total{\total}
$\FPprint{#1}$\\\\
}
%
\def\itotal{$\FPprint\total$}
\begin{document}
\begin{tabular}{l}
\Item{17.5}
\Item{12}
\itotal
\end{tabular}
\end{document}