Zaokrąglanie Liczb

0

A więc pisze sobie program który pobiera liczbę z przecinkiem ,którą ma stopniowo zamieniać ją na liczbę całkowitą. Program co przejście pętli mnoży liczbę razy dziesięć i ma przestać gdy liczba jest już całkowita. Sprawdza to warunek który porównuje liczbę do jej zaokrąglenia. Program działał na większości przypadkach dopóki nie postanowiłem wpisać 25.67 ,więc pokornie proszę o pomoc.
tak wygląda kod:

int main(){
    for(int j=0;;j++){
        double liczba;
        cin>> liczba;
           for(int i=0;;i++){
                if(liczba== round(liczba)){
                    break;}
                else{
                    liczba*=10;
                    przecinek++;
                    cout<<"liczba-   "<< liczba<<  endl ;
                }
            }
      }
}
7

tak się nie porównuje liczb zmiennoprzecinkowych. 25.67 zapewne nie ma dokładnej reprezentacji binarnej i mnożenie przez 100 nie doprowadzi do idealnej liczby całkowitej. Zapewne 25.67 w zapisie binarnym efektywnie daje coś w stylu 25.6699999997 i stąd twój problem.
Potrzebny ci taki warunek: fabs(liczba - round(liczba)) < 0.000001.

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