After a conversation with JKC regarding this whole deal and the float value 10., I think I understand what is going on here.
Culling from our conversation, float 10. is actually 1., as char data is mapped to 0-1. However, 1. (char 255) is not really 1. (which isn't representable in 8 bit fixed point, since it would be 256). So floating point greater than 1. becomes 1.-1/256., i.e. 0.996.
This all boils down to a more simple explanation that float maps to the range 0-0.996 char 0-255.