witajcie, potrzebuję porównywać liczby( stringi -> l. zmiennoprzecinkowe (dziesiętne) ) ale mam problem z napisaniem odpowiedniego algorytmu z warunkami... sam algorytm niby nie trudny ale problemy pojawiają się gdy liczby mają zły format i nie za bardzo wiem jak sobie z tym poradzić
przykład na operatorze<, zmienne *this i other
if(signFlag==true && other.signFlag==false) //-4 < 2
return true;
else if(signFlag==false && other.signFlag==true) //4 < -2
return false;
else
{
if(dotPos<other.dotPos)
fillBeginWithZeros(other.dotPos-dotPos); //wypełniam początek zerami w przypadku gdy *this=20 i other=101
register int i=firstNonZeroNumber(), j=other.firstNonZeroNumber();
register int k=dotPos-i, l=other.dotPos-j;
if(k<l)
return true;
else if(k>l)
return false;
else
{
for(; i<dotPos && j<other.dotPos; ++i, ++j)
{
if(number[i]<other.number[j])
return true;
else if(number[i]>other.number[j])
return false;
}
for(i=dotPos+1, j=other.dotPos+1; i<number.size() && j<other.number.size(); ++i, ++j)
{
if(number[i]<other.number[j])
return true;
else if(number[i]>other.number[j])
return false;
}
register int sizeOfNumber=number.size()-(dotPos+1);
if(sizeOfNumber<(other.number.size()-(other.dotPos+1)))
return true;
else if(sizeOfNumber>(other.number.size()-(other.dotPos+1)))
return false;
else
return true;
}
}
takie coś zadziała gdy mam 010 i 101 ale 0010 i 101 już nie. Co posiadam -> number.size() czyli rozmiar całego stringa, dotPos przechowujący pozycję kropki w stringu a także signFlag które mówi czy liczba jest dodatnia czy ujemna. Każda wpisywana liczba otrzymuje ".0" nawet jeżeli jest całkowita. Liczby (znaki w stringu) nie posiadają "-". Może uda się komuś coś podpowiedzieć jak to zrobić żeby działało dla różnych formatów liczb..
EDITKA: Podmieniłem kod - wygląda na to, że tak sobie poradziłem -> jak dotąd nie znalazłem błędnego wyniku ale może nie spełnia to wszystkich warunków, będę dalej testował.