It's called floating point precision. Numbers have limited precision and therefore what may look like a nice "round" mathematical operation may not so much look like for the computer dealing in binary number representations.
The following program produces 0.30000001192092895508 for floating point operations.
Would you increase the precision and use double instead of float, the result has better (but not perfect) precision: 0.30000000000000004441
#include <stdio.h>
int main()
{
float fa = 0.1f;
float fb = 0.2f;
float fc = fa + fb;
printf("float c = %.20f\n", fc);
double da = 0.1d;
double db = 0.2d;
double dc = da + db;
printf("double c = %.20lf\n", dc);
return 0;
}