but this is one old dog trying to learn new tricks.
I'm pretty sure you borrowed that code from somewhere. It irritates me how many times I see
int incomingByte;
That's nearly as irritating as
byte myInt;
float myChar;
int myFloat;
etc. that I've seen.
If you are going to, unnecessarily, use a type name in a variable name, the type name needs to match the name used in the variable.
char incomingChar;
If you make that change, you'll see that the cast is not necessary, that isdigit() gets a variable of the right size and type, and that the String (ugh?) class gets something to append that it doesn't need to first convert to a String.