You could just tell TikZ explicitly that you want an integer.
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}
\tikzset{mynode/.style={circle, fill=blue!25, minimum size=0.1 cm}}
\foreach \ilayer in {0,...,3} {
\tikzmath {\nnodes = 3 ^ \ilayer; }
\tikzmath {\leftnum = int(1 - floor(\nnodes / 2) - 1); }
\tikzmath {\rightnum = \nnodes - floor(\nnodes / 2) - 1; }
\foreach \isibling in {\leftnum,...,\rightnum} {
\tikzmath {\d = 3 ^ (- \ilayer) * 15; }
\tikzmath {\x = \isibling * \d; }
\tikzmath {\y = - \ilayer * 2; }
\node[mynode] (node_\ilayer_\isibling) at (\x cm, \y cm) {\isibling};
}
}
\end{tikzpicture}
\end{document}

Or
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}
\tikzset{mynode/.style={circle, fill=blue!25, minimum size=0.1 cm}}
\foreach \ilayer in {0,...,3} {
\tikzmath {int \nnodes,\leftnum,\rightnum;
\nnodes = 3 ^ \ilayer;
\leftnum = 1 - floor(\nnodes / 2) - 1;
\rightnum = \nnodes - floor(\nnodes / 2) - 1; }
\foreach \isibling in {\leftnum,...,\rightnum} {
\tikzmath {\d = 3 ^ (- \ilayer) * 15;
\x = \isibling * \d;
\y = - \ilayer * 2; }
\node[mynode] (node_\ilayer_\isibling) at (\x cm, \y cm) {\isibling};
}
}
\end{tikzpicture}
\end{document}
In principle you do not need the math library here.
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\tikzset{mynode/.style={circle, fill=blue!25, minimum size=0.1 cm}}
\foreach \ilayer [evaluate=\ilayer as \nnodes using {int(3 ^ \ilayer)},
evaluate=\nnodes as \leftnum using {int(1 - floor(\nnodes / 2) - 1)},
evaluate=\nnodes as \rightnum using {int(\nnodes - floor(\nnodes / 2) - 1)}]
in {0,...,3} {
\foreach \isibling
[evaluate=\ilayer as \d using {3 ^ (- \ilayer) * 15},
evaluate=\isibling as \x using {\isibling * \d},
evaluate=\ilayer as \y using {- \ilayer * 2}]
in {\leftnum,...,\rightnum} {
\node[mynode] (node_\ilayer_\isibling) at (\x cm, \y cm)
{\isibling};
}
}
\end{tikzpicture}
\end{document}

\documentclass
, includes all relevant\usepackage
commands, ends with\end{document}
and compiles without errors, even if it does not produce your desired output. – Sandy G Mar 27 '19 at 14:32