int val = analogRead(A0);
float voltage = (val);
Serial.print(voltage);
Serial.println(" ");
Why are you converting the integer to a float? The voltage read from pin is not in the range 0 to 1023 volts, so your "conversion" is useless.
Is there any way I can get it to just return clean data?
The Arduino with XBee IS sending clean data. Some interference is happening that corrupts the data between the two XBees.
What you need to do is send recognizable packets, with some information, like packet length and checksum, added, and test the packet on the receiving end. Corrupted packets should be discarded.
For instance, if you send <3:182:xxx>, where < is the start of packet marker, 3 is the payload size, and xxx is the checksum, you could discard any packet missing a start marker, any packet missing an end marker, any packet with the incorrect number of delimiters, any packet with a payload length not equal to the defined length, and any packet with an incorrect checksum.