There are a couple of reasons that you can get these floating point errors. The first and most obvious is that there is a limited number of bits allocated to represent the number and since there are an unlimited number of numbers between 0 and 1 not everyone of these can be represented. But there is another reason, which is more common and that is that you simply can't exactly represent certain numbers in the binary system. Just like in the decimal system you can't accurately write the number 1/3 (one third) since it would be 0.33333333...... in the same manner you can't write 1/10 (one tenth) in binary format (using the IEEE 754 standard used for storing the Single data type).

The System.Single data type is an approximation of a floating point number so you must always treat its value as an approximation.