The following example solves the issue by expanding \resa before \cellcolor is expanded and looks at its arguments.
The second problem is, the range for the color model gray is between 0 and 1 inclusively. The values 0.8 and 1.0 exceed this, when multiplied by 2. Therefore the example checks the result and limits it to 1 if necessary.
\documentclass{article}
\usepackage{fp,xcolor,colortbl}
\newcommand{\he}[1]{%
\FPeval{\resa}{2 * #1}%
\ifdim\resa pt>1pt %
\def\resa{1}%
\fi
\edef\processme{\noexpand\cellcolor[gray]{\resa}}%
\processme
#1%
}
\begin{document}
\begin{tabular}{| c | c | c |}
\hline
\he{0.1} & \he{0.2} & \he{0.3} \\
\hline
\he{0.5} & \he{0.8} & \he{1.0} \\
\hline
\end{tabular}
\end{document}

And a version, where all the math is done by fp means. Also the text color is switched to white, if the background color is getting to dark to maintain readability.
\documentclass{article}
\usepackage{fp,xcolor,colortbl}
\newcommand{\he}[1]{%
\FPeval{\resa}{max(0, min(1, 2 * #1))}%
\edef\processme{\noexpand\cellcolor[gray]{\resa}}%
\processme
\FPiflt{\resa}{0.5}%
\color{white}%
\fi
#1%
}
\begin{document}
\begin{tabular}{| c | c | c |}
\hline
\he{0.1} & \he{0.2} & \he{0.3} \\
\hline
\he{0.5} & \he{0.8} & \he{1.0} \\
\hline
\end{tabular}
\end{document}

Still, there is room for improvement. The number result has lots of unnecessary zeros at both ends, which can be shortened, e.g.:
0.200000000000000000 ⇒ .2
0.400000000000000000 ⇒ .4
1.000000000000000000 ⇒ 1
The zeroes at the end can be removed by \FPclip to 0.2, 0.4 and 1.
Package thepdfnumber goes a step further and provides \thepdfnumber for shortening the decimal numbers at both ends to get .2, .4 and 1. Even better, \thepdfnumberNormZeroOne takes care of the range condition for the gray values:
\documentclass{article}
\usepackage{fp,xcolor,colortbl}
\usepackage{thepdfnumber}
\newcommand{\he}[1]{%
\FPeval{\resa}{2 * #1}%
\edef\processme{%
\noexpand\cellcolor[gray]{\thepdfnumberNormZeroOne\resa}%
}%
\processme
\FPiflt{\resa}{0.5}%
\color{white}%
\fi
#1%
}
\begin{document}
\begin{tabular}{| c | c | c |}
\hline
\he{0.1} & \he{0.2} & \he{0.3} \\
\hline
\he{0.5} & \he{0.8} & \he{1.0} \\
\hline
\end{tabular}
\end{document}
\cellcolor[gray]{\resa}will work, provided\resaexpands to a proper value. – egreg Apr 25 '15 at 21:11\resais defined inside the cell group.\cellcolorstores the color setting in a global macro via\gdef, thus\resais not expanded. Then after the cell is processed and stored in a box,colortblsets the cell background and the box, but the cell background color contains\resa, whose definition is lost after processing the cell contents. – Heiko Oberdiek Apr 25 '15 at 21:50;-)– egreg Apr 25 '15 at 21:58\cellcolor[gray]{\thepdfnumberNormZeroOne{\strip@pt\dimexpr#1pt*2}}. But storing the number in a macro is nicer, especially if it is used more than once as in the more elaborate examples. – Heiko Oberdiek Apr 25 '15 at 22:20