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;
} ```