@OP
The codes that you have posted are not prepared correctly to keep conformity with the principles of I2C Bus operation. I am writing below these principles which, I hope, you will follow to correct/adjust your codes. Hopefully, you will be able to see correct temperature reading of the DS18B20 sensor on the Serial Monitor of Master (UNO).
1. Check that the setup among UNO, NANO, and DS18B20 is similar to the following diagram.

Figure-1: Connection diagram among UNO, NANO using I2C Bus
2. We have to create the I2C Bus by including the following lines in the sketch,
#include<Wire.h>
Wire.begin();
//Wire.begin(slaveAddress); for slave
3. Check from Master side that the slave is present by executing the following codes:
Wire.beginTransmission(slaveAddress);
byte busStatus = Wire.endTransmission();
if(busStatus !=0x00)
{
Serial.print("Slave is absent...!");
while(1); //wait for ever
}
4. Master makes request to the Slave to send temperature data which is float data (like 24.75). In response, how many data bytes will the Slave be sending to Master? Is it 2-byte (that's what you have entered in you sketch) or 4-byte. It is 4-byte - why and how? We see later. Let us execute the following code:
Wire.requestFrom(slaveAddress, 4);
After the execution of the above code, the Master waits until all the requested data bytes have arrived into the FIFO of the Master.
5. After the reception of the command of Step-4, the Slave goes out of its loop() function and then enters into the following sub-program (an interrupt context).
void sendEvent(int howMany)
{
}
Let us note down that the above sub-program must be declared in the setup() function by the following
Wire.onRequest(sendEvent();
6. The Slave executes the following codes in the sendEvent() sub-program to place the 4-byte temperature data into its FIFO for onward transmission to the Master.
Wire.write(dataByte0);
Wire.write(dataByte1);
Wire.write(dataByte2);
Wire.write(dataByte3);
7. In the meantime, the data bytes of Step-6 has arrived to the Master. Now, the Master executes the following codes to collect the data bytes from its FIFO into an array named byte dsArray[4];.
for(int i= 0; i<4; i++)
{
dsArray[i] = Wire.read();
}
8. Let us include following codes in the sketch of the Slave to convert the float type temperature data into 4-byte data. I2C Bus is a byte oriented transmission link which demands that we must convert the float number into separate 4-byte data before transmission.
union
{
float dsTemp;
byte dsArray[4];
}data;
dataByte0 = data.dsArray[0];
......................................
.....................................
dataByte3 = ds.dsArray[3];
data.dsTemp = temp; //temp is the float value that you have already acquired
9. At the Master side, carry out the reverse process of Step-8 to get the float value of temperature from the received bytes.
If the adjusted program works, it is fine; else, post them to undergo corrections as needed.
