Funkcja zamieniająca double na string

1

Stworzyłem funkcje która zamienia zmienną w double'u na typ string. Program nie działa poprawnie dla 0.0006 i 0.6567 gdyż wypisuje dla nich 0.0005 i 0.6566 gdzie ma wypisywać tą samą liczbę tyle że w zmienionym typie. Zakładam że problem leży w zaokrąglaniu liczb zmiennoprzecinkowych lecz nie mogę go znaleźć.

string double_na_string(double liczba){
    string wynik=""; double dlugosc=0,przecinek=0; bool ujemna = false,zero=false; int ilosc_zer = 0;
    if(liczba < 0) {
        liczba = -liczba;
        ujemna = true;
           }

    unsigned long long liczba_w_int = liczba ;
    if(liczba==liczba_w_int){
    for(unsigned long long i=1;;i*=10){ if(liczba_w_int/i==0) break; dlugosc++;}
        switch (liczba_w_int){
                 case 0: return "0"; break;
                 case 1:
                     if(ujemna==true && dlugosc==1)return "-1";
                     return "1";
                 case 2:
                     if(ujemna==true && dlugosc==1)return "-2";
                     return "2";
                 case 3:
                     if(ujemna==true && dlugosc==1)return "-3";
                     return "3";
                 case 4:
                     if(ujemna==true && dlugosc==1)return "-4";
                     return "4";
                 case 5:
                     if(ujemna==true && dlugosc==1)return "-5";
                     return "5";
                 case 6:
                     if(ujemna==true && dlugosc==1)return "-6";
                     return "6";
                 case 7:
                     if(ujemna==true && dlugosc==1)return "-7";
                     return "7";
                 case 8:
                     if(ujemna==true && dlugosc==1)return "-8";
                     return "8";
                 case 9:
                     if(ujemna==true && dlugosc==1)return "-9";
                     return "9";
                 default:
                     for(int i=0;i<dlugosc;i++){
                     wynik.insert(0, double_na_string(liczba_w_int%10));
                     liczba_w_int/=10;
                     }

                     break;
        }
    }
    else{
      for(int i=0;;i++){
            if(fabs(liczba - round(liczba)) < 0.000001){
                break;}
            else{
                 if(liczba < 1 && liczba > 0){ ilosc_zer ++;}
                liczba*=10;
                przecinek++;
            }
      }
      unsigned long long liczba2 = liczba;
      wynik = double_na_string(liczba2);
      for(int i = 0; i<ilosc_zer ;i++) {wynik.insert(0,"0");}
      wynik.insert(wynik.length()-przecinek,".");
    }
        if(ujemna) return wynik.insert(0,"-");
            else return wynik;
    }

int main(){
        for(;;){
    double x = 0;
    cin >> x;
    cout<<setprecision(13);
    cout <<double_na_string(x)<<endl;
        }
return 0;
} ```

1 użytkowników online, w tym zalogowanych: 0, gości: 1