Here is a solution using the minifp package and some aux file magic (and so you need to run the file through latex twice to get the correct values).
\documentclass{article}
\usepackage{minifp}
\makeatletter
\newcommand*\@subtotal{0}
\newcommand*\pr[1]{%
#1%
\MFPadd{\@subtotal}{#1}\@subtotal\relax%
\MFPstrip{\@subtotal}\@subtotal}
\newcommand*\prsum{\@subtotal}
\def\student@allsum{???}
\gdef\prallsum{\student@allsum}
\AtEndDocument{%
\write\@auxout{\string\gdef\string\student@allsum{\@subtotal}}}
\makeatother
\begin{document}
The price of the first item is \pr{10.23}, that of the second item is
\pr{2.30}.
The total so far is \prsum{} the overall total sum is \prallsum.
There is another item about \pr{2.33}.
Not the total sum so far is \prsum{} and the overall total sum is \prallsum.
\end{document}

Discussion
The command
\newcommand*\pr[1]{%
#1%
\MFPadd{\@subtotal}{#1}\@subtotal\relax%
\MFPstrip{\@subtotal}\@subtotal}
defines the \pr macro, so that it first prints the input value (assumed to be a decimal number}, and adds it to the subtotal using the \MFPadd function of the minifp package. It then strips the trailing zeros using the \MFPstrip function. (Side note: minifp performs fixed-point arithmetic with up to 8 decimal places.)
The command \prsum just prints the subtotal; noticed that in the course of the text I've edited your file to use \prsum{} instead, to avoide the macro gobbling up the space afterwards. If you are only using \prsum in text, you can use xspace to circumvent this need.
To print the overall total sum, what we do is, at the end of the document (when you write \end{document}, write to the .aux file the current subtotal. We do this by writing it as a command definition: after running pdflatex on your file, the .aux file should contain the line
\gdef\student@allsum{14.86}
This line is read back into the stream around \begin{document} (when the aux file is read), and so overwrites the original definition of \student@allsum to be ???. We have to include an original definition because, before the first pass of pdflatex, the command \student@allsum would otherwise be undefined (since the aux file is generated during the run, and is not available to be read before the first run).
Notice that this means, like resolving label-references, that to update the correct value from \prallsum you need to run pdflatex at least twice after changing the file.