• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak liczbę zmiennoprzecinkową zamienić na całkowitą?

Object Storage Arubacloud
0 głosów
1,791 wizyt
pytanie zadane 14 maja 2017 w C i C++ przez Karol.99 Użytkownik (550 p.)
Chodzi mi o to żeby wynik na przykład takiego działania:

10/4

wyświetlił jako 3, a nie 2,5.

2 odpowiedzi

+1 głos
odpowiedź 14 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Chyba chodziło Ci, żeby wyświetlało 2.5, a nie 2 :p bo normalnie to wyświetla 2 (a nie 3).

(double) 10/4;

 

To się nazywa rzutowanie jawne, ponieważ jawnie mówisz jaki typ będzie miała zmienna, która powstanie z danego wyrażenia. Istnieje też rzutowanie niejawne - które kompilator wykonuje sam, bez pisania przez Ciebie kodu.

Ewentualnie możesz poczytać o używaniu _cast, ale to już raczej jak będziesz na troszeczkęwyższym poziomie ;)
komentarz 14 maja 2017 przez Knayder Nałogowiec (37,640 p.)
W tym przypadku należy użyć rzutowania na int, a nie double.
komentarz 14 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
No, ale normalnie wyświetla się to jako 2 (a nie 3 - nwm skąd to wziął). Więc chyba się po prostu pomylił i chciał by wyświetlało się 2,5, więc w sumie rzutowanie tego na int nie ma żadnego sensu...
komentarz 14 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
lub chcial zaokraglic
komentarz 14 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
No to zaokrąglenie w górę to i tak nie zrobi się rzutując na inta.

Jednakże jak chciał zaokrąglić, jak twierdzi, że takie wyrażenie wypluwa mu 2.5? Troszeczkę nielogiczne.
komentarz 14 maja 2017 przez Karol.99 Użytkownik (550 p.)
Niestety double (chyba) tylko zaokrągla w dół, więc prawdopodobnie będę musiał ogarnąć funkcję ceil(), bo potrzebuje zaokrąglenia w górę każdej niecałkowitej liczby.
komentarz 14 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
ale autor pytanie nie mowi nic o rzutowaniu. Chce zapisac 2,5 jako 3, wiec od razu przyszlo mi namysl zaokraglanie
komentarz 14 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
mozesz sprawdzic czy reszta z dzielenia > 0, wtedy +1 do wyniku.
komentarz 14 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Ale o czym Ty mówisz!?

1. Double podaje Ci dokładną wartość, a nie zaokrąglenie

2. 10/4 w C++ wyrzuci Ci zawsze 2, a nie 2,5?!

No jeżeli chcesz by to zaokrąglało w górę to ceil() z biblioteki <math.h> lub <cmath>
komentarz 14 maja 2017 przez Karol.99 Użytkownik (550 p.)
A no faktycznie.

Dzięki wielkie 10kw10
komentarz 14 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)

@10kw10 ale po co skoro są do tego gotowe funkcje?

+1 głos
odpowiedź 14 maja 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 14 maja 2017 przez Eryk Andrzejewski

Musisz po prostu zaokrąglić wynik. Użyj funkcji std::round() z biblioteki cmath

#include <iostream>
#include <cmath>

int main()
{
    std::cout << std::round(10.0 / 4) << "\n";
}

BTW.

10 / 4 to dzielenie inta przez int. Wynikiem będzie więc 2, a nie 2.5 czy 3. Jeżeli chcesz żeby wynikiem było 2.5, czyli liczba "z przecinkiem" to przynajmniej jeden z operandów musi być liczbą zmiennoprzecinkową, czyli zapisz 10.0 / 4.

A tak dodatkowo:

  • Funkcja std::round() zaokrągla liczby tak, jak robi się to na codzień. To znaczy: 2.4 to będzie w zaokrągleniu 2, natomiast 2.5 to już 3.
  • Funkcja std::floor() zaokrągla "do podłogi", czyli w dół. To znaczy: 2.4 to będzie w zaokrągleniu 2, a 2.5 to też będzie 2, 2.9 to też będzie 2.
  • Funkcja std::ceil() zaokrągla "do sufitu", czyli w górę. To znaczy: 2.1 to będzie w zaokrągleniu 3, 2.5 to też 3, 2.9 też 3.
komentarz 14 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
przywrócone 14 maja 2017 przez 10kw10

Użyj funkcji std::rand()

std::round()

komentarz 14 maja 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Och, dziękuję. Nie wiem o czym myślałem podczas pisania tej odpowiedzi laugh

Podobne pytania

0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 31 maja 2016 w C i C++ przez qsoll Początkujący (440 p.)
–1 głos
2 odpowiedzi 305 wizyt
pytanie zadane 1 listopada 2017 w C i C++ przez michal12334 Obywatel (1,510 p.)

92,595 zapytań

141,444 odpowiedzi

319,717 komentarzy

61,980 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...