It seems to me, your receiving code is not very reliable.
You are not doing anything to terminate the character array that you are receiving. You never check if you are receiving more than 9 characters.
You have the character array in some potentially indeterminate state every time loop() starts again. It probably should have zero bytes in it, but I don't know if you should rely on this. I can't be bothered remembering which compilers and which operating systems and which hardware guarantee null bytes when an array comes into scope, so I always clear them explicitly if it is important.
To illustrate what I am taking about, if you receive "127.3" OK, and then the next time you receive a "9" , and nothing else within 10 milliseconds, then you might get 927.3 from your char to float calculation.
You also don't seem to consider getting any character ( possibly with a bit error ), which is not a digit. I never use atof() so I don't know what it will do, but if reliability is important to you, you should consider that possibility.
Your sending piece of code also looks strange. You don't seeming to be "printing" the value of the variable you supposedly got from the sensor.