The package xintfrac may be used for such computations. The package is primarily concerned with computations, not typesetting, so I have added here a little macro to transmit the typesetting task to other packages such as siunitx or numprint.
Update: I wondered in the comments to the code below if wrapping across lines was possible with siunitx, or with numprint in mathmode. From very brief examination of some log a test document using \showoutput it seems that
siunitx puts the whole thing in a \hbox, whether in math mode or in text, and additionally also encloses the thousand separator in a \hbox,
numprint, when in math mode, typesets the thousand separator in a \hbox, but when in text mode, it does not: hence with numprint+text mode wrapping is possible (the entire thing is fortunately not enclosed in a \hbox), but in math mode it does not seem to be.
I apologize for these details perhaps only indirectly related to the OP's question: but if we are to subtract power of tens like 10^{100}-1, we have to think about how to print the resulting one hundred nine's.
\documentclass{article}
\usepackage{color} % for testing an option of siunitx
% formatting numbers with macro \np of numprint
% http://www.ctan.org/tex-archive/macros/latex/contrib/numprint
\usepackage[np]{numprint}
\npthousandsep{\allowbreak\,}
% The \allowbreak allows very long numbers to wrap at endlines
% (but does not work in math mode, I didn't investigate why, perhaps numprint
% uses an \hbox)
\npdecimalsign{.}
% formatting with macro \num of siunitx
% http://www.ctan.org/tex-archive/macros/latex/exptl/siunitx
% I don't know if very long numbers
% wrapping at endlines are possible with it. I tried the following option but it
% doesn't do what I hoped for:
\usepackage[group-separator={\allowbreak\,}]{siunitx}
% computes expandably with long fractions and decimal numbers
% http://www.ctan.org/tex-archive/macros/generic/xint
\usepackage{xintfrac}
% The next macro prepares a decimal fraction as output by macros of the xintfrac
% package for printing by specialized software.
% Another macro could be written to directly prepare the number in scientific
% notation, but here we simply prepare the number in a.b form with b the
% possibly empty strings of digits after the decimal mark (which is a dot), and
% the transformation into scientific notation can be done at the level of the
% typesetting package.
% The first parameter to \decprint is optional and is the command to be applied.
% The default is \np from the numprint package. But one may use for example
% [{\num[key=value]}] to employ \num from the siunitx package with some options.
% The second argument is mandatory and is the decimal number to be typeset. On
% input, xintfrac understands the following format: a, or a.b, or a[c], or
% a.b[c], where [c] means 10 to the power c, and a and b are strings of digits.
% Example: \decprint {\xintAdd {1[-10]}{1[10]}}, which first computes the sum of
% 1e-10 and 1e10 (xintfrac does not understand the scientific notation, it uses
% brackets rather than e or E) and then
% prints the result using \np command from numprint package.
\makeatletter
\newcommand{\decprint}[2][\np]
{\expandafter\expandafter\expandafter\dec@print\xintREZ{#2}{#1}}
\def\dec@print #1/#2[#3]#4{%
\ifnum #3<0
\expandafter\@firstoftwo
\else\expandafter\@secondoftwo
\fi
{#4{\xintTrunc {-#3}{#1[#3]}}}% non-zero digits after decimal point
{#4{\xintDSH {-#3}{#1}}}% number is an integer, no decimal point needed
\ifcase\XINT@isOne{#2}
\expandafter\@firstofone % unexpected, denominator wasn't power of ten
\or\expandafter\@gobble
\fi {/#4{#2}}}
\makeatother
\begin{document}
$0.1-100$ is $\decprint{\xintSub{0.1}{100}}$, and it is
\ifcase\xintCmp{\xintSub{0.1}{100}}{-99}
equal \or greater \else smaller \fi than $-99$.
$0.01-10^{10}$ is \decprint{\xintSub{0.01}{1[10]}}.
$0.01-10^{10}$ is \decprint[\num]{\xintSub{0.01}{1[10]}}.
$0.01-10^{75}$ is \decprint{\xintSub{0.01}{1[75]}}.
$0.01-10^{75}$ is \decprint[{\num[mode=text]}]{\xintSub{0.01}{1[75]}}.
$3.14-\np{5e-15}+\np{3e15}$ is \decprint{\xintSumExpr
{3.14}{-5[-15]}{3[15]}\relax }
$3.14-\np{5e-15}+\np{3e15}$ is \decprint[{\num[mode=text]}]{\xintSumExpr
{3.14}{-5[-15]}{3[15]}\relax }
$3.14-\np{5e-25}+\np{3e25}$ is \decprint{\xintSumExpr
{3.14}{-5[-25]}{3[25]}\relax } and we could make it wrap accross lines using
\textbackslash np.
$3.14-\np{5e-25}+\np{3e25}$ is \decprint[{\num[color=blue]}]{\xintSumExpr
{3.14}{-5[-25]}{3[25]}\relax } and we tried but failed to let it wrap
accross lines using \textbackslash num.
\end{document}
