Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ jak wypisać float jeśli jest całkowita bez zer

alojzikftp 01 Lip 2011 10:55 1920 8
  • #1 01 Lip 2011 10:55
    alojzikftp
    Poziom 14  

    Witam
    Mam następujący problem:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    I teraz ten wynik może wyjść na przykład 12313 albo 124234,5.
    Jak zrobić, żeby jeśli jest całkowity, to wypisać bez przecinka i cyfr po nim, a jeśli nie, to z 1 cyfrą po przecinku. może być cout albo printf, ale wolałbym printfa.
    Próbowałem coś z dzieleniem modulo przez 1, ale nie wyszło, a to przecież chyba jest zrobione już w C++.
    Aha i jeszcze mogą tu wyjść dość duże liczby, więc jest problem z coutem w stylu "1323e19"

    0 8
  • Pomocny post
    #2 01 Lip 2011 11:45
    Terminator
    Poziom 23  

    Na szybko ...

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #3 01 Lip 2011 11:52
    alojzikftp
    Poziom 14  

    Tylko że jest problem z duzymi liczbami
    float a = 131232323.7;
    if( a == float( (int)a ) ) //sprawdzamy czy całkowita
    printf("%.0f",a);
    else
    printf("%.1f",a);
    daje zły wynik :(

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    daje zły wynik 131232320 czyli brakuje 3,7 :(

    0
  • Pomocny post
    #4 01 Lip 2011 12:02
    Terminator
    Poziom 23  

    To napisz jak duże chcesz te liczby bo float też ma ograniczoną "pojemność".

    1
  • #5 01 Lip 2011 12:04
    alojzikftp
    Poziom 14  

    Wiesz co ale to nie jest kwestia ograniczonej pojemności floata.
    Twoje rozwiazanie działa dość dobrze, ale wkleiłem tam wynik i się okazuje że z liczby z końcówką 23,7 zrobiło się 20. Chciałbym poprawić ten jeden błąd.
    Liczby do miliarda chciałbym,
    ale myślałem że jest do tego jakieś polecenie w C++, a nie że się trzeba tak bawić

    0
  • Pomocny post
    #6 01 Lip 2011 12:16
    Terminator
    Poziom 23  

    Zrobiło się 20 bo liczba 131232323.7 zapisana jest jako 1.3123232e+008 (= 131232320.0)
    Polecam podwójną dokładność - double.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #8 01 Lip 2011 22:30
    alojzikftp
    Poziom 14  

    Dziękuję bardzo za pomoc, ciekawi mnie, dlaczego nie ma do tego jakiegoś formatowania, przecież każdy kalkulator z tego korzysta:) cout na przykład tak działa, no ale to nie. pozdrawiam

    0
  • Pomocny post
    #9 09 Lip 2011 08:04
    arkwyl
    Poziom 23  

    w cout jest metoda bodajże point() ustawia miejsce przecinka w liczbach.

    0