How do I convert a string to a float value

I'm not sure if that is really what I need, but basically I want the arduino to read a value sent over a software serial from a pH sensor board. I have tried using atof() but it seems to truncate everything after the decimal point (ie. 8.00 instead of 8.13) and I absolutely need accuracy to at least 0.1 . I can't just use serial.print() because I need the arduino to compare the ph value to specific value and then make adjustments as needed.

 ... 
#include <SoftwareSerial.h>
  #include <LiquidCrystal.h>
  #define rxpin 12
  #define txpin 11 
  SoftwareSerial mySerial(rxpin, txpin);
  LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
  String inputstring ="";
  String sensorstring ="";
  boolean input_stringcomplete = false;
  boolean input_stringtemp = false;
  boolean sensor_stringcomplete = false;
  const int pumpPin = 9;
  const int ledPin = 13;
  
 char* Value = "0";
void setup(){
    lcd.begin(16, 2);
    Serial.begin(38400);
    mySerial.begin(38400);
    inputstring.reserve(5);
    sensorstring.reserve(30);
    pinMode(9, OUTPUT); 
    pinMode(13, OUTPUT);
}
void serialEvent() {
    char inchar = (char)Serial.read();
    inputstring += inchar;
    if(inchar == '\r') {input_stringcomplete = true;}
    if(inchar == 't') {input_stringtemp = true;}
  }
  void loop(){
  
    Serial.println("ph adjust");
    mySerial.print("r");
    mySerial.print('\r');
    delay(500);
    if(mySerial.available()){
       
        Value[0] = mySerial.read();
        float phVal = atof(Value);
        Serial.println(phVal);
        lcd.print(phVal);
        while (phVal > 5.8){
           
           digitalWrite(pumpPin, HIGH);
           delay(100);
           digitalWrite(pumpPin, LOW);
           delay(2000);
           lcd.clear();
           if (phVal <= 5.8)
             digitalWrite(ledPin, HIGH);
             break;
          }
          mySerial.print("e");
          mySerial.print('\r');
          delay(1000);
        lcd.clear();
       
       
        mySerial.flush();
      }
          
  }

I wish I knew more about how strings and serials operate so I could write a function that would extract the value I need. So again my questions are these: (1) How do I convert a string to a float with greater than 0.1 accuracy, (2) is there another way to extract the data from the serial buffer, or (3) if the answer is not fit for this forum where should I look to find out more about how serials and strings are constructed. I would really appreciate any advice, changes to code, or noteworthy tutorials. (sorry for the previous formatting of this post, i'm still learning)
Thanks

 Value[0] = mySerial.read(); float phVal = atof(Value);

That can't really work.
Post ALL your code ( you did read the sticky post the top of this section,didn't you?)

Please edit your post, select the code, and put it between [code] ... [/code] tags.

You can do that by hitting the # button above the posting area.

 char* Value = "0";

Wrong! This declares a variable that points to a hardcoded string that is one character long.

You want an array, so you can overwrite the characters in the array.

        Value[0] = mySerial.read();
        float phVal = atof(Value);

You are reading one character. How can that one character possibly represent a float?

        mySerial.flush();

Stop that! There is virtually no excuse for calling flush().

Thanks for your quick reply, PaulS, and for making me feel stupid, but your reply leaves me no closer to a solution. I already knew there were issues with my code, as I am clearly new to this. Please extrapolate on how to set up an array and read from it or at least point me in the right direction.

Try reading this:

That discusses how to grab a series of bytes, and collect them into a buffer. Then you can use atof to convert that to a float.

ahh thank you Nick Gammon ! just the kind of response I was looking for.