Temp sensor DS18B20 - Serial output not an integer

Thanks! I can now get good readings from it.

One quick question, though, I have no 4.7k pulldown resistor, and when i use one i don't get a temp. reading. Can this damage anything?

#include <OneWire.h>

//Temp sensor DS18B20 pin
OneWire  ds(3);
int ambient = 50;

void setup(void) {
  Serial.begin(115200);
  //
  pinMode(13, OUTPUT);
  int fanspd=1;  
  int fmin = 26.56;
  int fmax = 55;
  
  //Turn off onboard LED (used as Protect indicator)
  digitalWrite(13, HIGH);
  delay(1);
  digitalWrite(13, LOW);
}



void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  int del = 750;
  int fanspd = 1;
  int protect = 0;
  int fmin = 26.56;
  int fmax = 55;
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    ds.reset_search();
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,0);         // start conversion, with parasite power on at the end
  
  delay(del);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  Serial.print(celsius);
  Serial.print(" °C");
  Serial.println();
  
  //Find ambient
    //Overheat
  if ((float)raw / 16.0 < ambient) {if (protect = 0) {
ambient = ((float)raw / 16.0);
Serial.print("Ambient=");
Serial.print(ambient);
Serial.print(" ");}}
  
  //Error Checking
  
  //Temp is warmer than Min
  if ((float)raw / 16.0 >= fmin) 
  {
    fanspd=1;
  Serial.print("Cooling ");
}


//No sensor readout (data pin connection lost)
  if (OneWire::crc8(addr, 7) != addr[7] or (float)raw / 16.0 == 0)//((float)raw / 16.0 == 0)  
  {
   fanspd=100;
  protect = 2;
}

//Overheat - Temp higher than fmax
  if ((float)raw / 16.0 >= fmax)  {fanspd=100;
  Serial.println("Error 1 - Overheat");
  protect = 1;
}

if (protect == 1) {
 fanspd=100;
 digitalWrite(13, HIGH);
 delay(50);
digitalWrite(13, LOW);
if ((float)raw / 16.0 <= fmax - 1)
{
 protect = 0; 
}
}

  if (protect == 2) 
    {
     fanspd=100;
      Serial.println("Error 2 - Sensor missing or quite cold (0.00 C)");
     digitalWrite(13, HIGH);
     delay(50);
     digitalWrite(13, LOW);
     delay(100);
     digitalWrite(13, HIGH);
     delay(50);
     digitalWrite(13, LOW);
     if ((float)raw / 16.0 != 0)
     {
       protect = 0;
     }
    } 
}