It is not usual to compute numbers with string variables, although it works as soon as you have initialized the variable with temp = 0.
If you'd have left temp empty, temp = temp + 0.1 will produce a type mismatch error.

When you work with the data type Single, due to the method how a computer is processing fractional data in binary digits, some rounding error occurs.
This error does not appear when the data type Double is used.

When you use strings, VBs automatic type conversion takes place. Before a string can be used in a numeric expression it will be converted to a numeric data type and the numeric result will be converted bnack to a string before it is stored again in the string variable.
As it seems VB converts both expressions (temp and 0.1) into Doubles before computing, so as the rounding error of the Singles does not appear.