Arduino-xbee Data Pay Load Problem

Hi everyone,
I'm using Arduino-Xbee library for my Xbee network. I would like to send floating point value to the coordinator. But in arduino-xbee api, I have to use ZBTxRequest (XBeeAddress64 &addr64, uint8_t *payload, uint8_t payloadLength)
to send a packet. The problem is when I put a double/float value in the payload and send it using this command, on the receiver side, it was just an integer value. Decimal values are so important for my calculations. Can anybody give me suggestion on how can i send double/float values using Arduino-Xbee api?

Here are part of my code
When I transmit value like 2.7, on the receiver side, it can get only 2.

double hopdistance;
uint8_t hopsize[3]={9,1, hopdistance};

void broadcasthop(uint8_t hopsize)

Serial.print("\n Broadcasting hop size");
uint8_t pay = {hopsize[0],hopsize[1],hopsize[2]};
XBeeAddress64 addr64=XBeeAddress64(0x00000000, 0x0000ffff);
ZBTxRequest zbTX=ZBTxRequest(addr64,pay,sizeof(pay));
// Serial.print(pay[3]);
ZBTxStatusResponse txStatus=ZBTxStatusResponse();

if (xbee.readPacket(5000)) {
Serial.print("\nGot a reply packet for broadcast");
if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE)
Serial.print("\n Got transmit status response");
if (txStatus.getDeliveryStatus() == SUCCESS)
Serial.print("\nBroadcasting success!");
} else
Serial.print("\nBroadcasting error!");
// broadcasthop(hopsize);
Serial.print("\n No transmit status response");
} else if (xbee.getResponse().isError()) {
Serial.print("Error reading packet. Error code: ");
} else {
Serial.print("\nlocal XBee did not provide a timely TX Status Response -- should not happen");

double hopdistance;
uint8_t hopsize[3]={9,1, hopdistance};

So, you are truncating the value in hopdistance to a byte, and storing it in the array. That is NOT how to send a float/double.

Define a union of a float and a byte array. Create an instance of the union. Populate the float part. Send the byte array part.

On the receiver, define the same union and create an instance of it. Receive the byte array and populate that part of the union instance, and then use the float part.

Or use a struct, and send the whole struct.