i2c_readAck();
i2c_readNak();
Habe das jetzt so verstanden, das der i2c_readAck() die vor Komma stelle ausließt und der i2c_readNak() die nach Komma stelle ausließt. Die sollten Praktischer weise zu einer Zahl zusammen gefügt werden.
Das hast Du richtig verstanden, es hat aber was mit I2C Protokol zu tun, wenn Du mit i2C_readAck() liest, sendet der Master noch ein ACK Puls an den Slave, um zu sagen,
"Hallo wir sind noch nicht fertig, ich will weitere Daten lesen"
Mit i2c_read(Nack) wird halt kein Ack erzeugt womit der Master sagt, "wir sind jetzt fertig, will nichts meh von Dir" darauf folgt Stop und der Bus wird wieder Freigegeben

Tja, das zusammenfügen...
kommt drauf an, was Du willst...
Auf den LCD willst Du sie nicht darstellen(hast Du oben schon gesagt)
Über UART versenden ? dann mußt Du das ganze in ASCII wandeln
Rechnen ? Da stellt sich die Frage, wie genau ?
Muß es bis auf 0,5 Grad genau gehen ?
Mann könnte das ganze in float wandeln, frage ist nur, ob es lohnt, float ist so eine Sache bei AVR, aber hier ein Beispiel, wie das gehen könnte
Code:
float temperatur;
temperatur = i2cpuffer[0];
if (i2cpuffer[1])
   temperatur +=0.5;
Eventuell muß man bei der ersten Zuweisung ein cast machen (float)i2cpuffer[0] ?

Gruß Sebastian