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

Zaokrąglanie miejsc po przecinku C++

VPS Starter Arubacloud
+1 głos
1,586 wizyt
pytanie zadane 23 lipca 2020 w C i C++ przez ten_tomek Nowicjusz (160 p.)

Dzień dobry,

W ramach ćwiczeń z C++ znalazłem kilka prostych zadań które chciałem zrobić, między innymi program który wyliczy BMI danej osoby na podstawie wagi i wzrostu. Program sam w sobie działa, ale chciałbym aby wyniki BMI zaokrąglały się do dwóch miejsc po przecinku i teraz pytanie jak to zrobić? Dodam tylko, że nie chciałbym żeby program usuwał niepotrzebne miejsca po przecinku, tak aby zostały tylko dwa. Chciałbym żeby program rzeczywiście zaokrąglał 

Z góry dziękuję za pomoc

#include <iostream>

float waga, wzrost, BMI;

int main()
{
	std::cout << "Hej, moge obliczyc Twoje BMI. Wystarcza mi tylko dwie informacje \n"  ;
	std::cout << "Wpisz tutaj swoja wage w kg: ";
	std::cin >> waga;
	std::cout << "A teraz podaj mi swoj wzrost w cm: ";
	std::cin >> wzrost;

	BMI = waga / ((wzrost/100)* (wzrost / 100));

	std::cout << "Twoj wskaznik BMI to: " << BMI ;

	if (BMI < (185/10))
		std::cout << " O ty chudy leszczu. Zacznij jesc!";
	else if (BMI > 25)
		std::cout << " O ty grubasie. Nie wpieprzaj tyle!";
	else
		std::cout << " No jest git. Nie za duzo, nie za malo.";

}

Pozdrawiam,
Tomek

1
komentarz 23 lipca 2020 przez VBService Ekspert (251,250 p.)

Proponuje zamienić te linie:

 if (BMI < (185/10))
        ....
 else if (BMI > 25)

na:

int main()
{
    const float BMI_NORMAL_LOW = 18.5;
    const float BMI_NORMAL_HIGH = 24.99;

    std::cout << "Hej, ...


    if (BMI < BMI_NORMAL_LOW)
        ...
    else if (BMI > BMI_NORMAL_HIGH)
        ...

Zakresy wartości BMI ]

komentarz 24 lipca 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)
W C++ 185/10 to 18. Jak chcesz 18.5, to napisz 18.5 :)

2 odpowiedzi

+2 głosów
odpowiedź 24 lipca 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)

Pytanie tylko do czego potrzebujesz tej zaokrąglonej wartości. Do wypisania na ekranie czy dalszych obliczeń?

Kuba776 podrzucił Ci jedno rozwiązanie, pozwalające obliczyć zaokrągloną wartość. Ja pokażę jak tylko wypisać zaokrągloną wartość. Zobacz co się stanie, jeżeli ktoś będzie miał bmi = 25.0001.

std::round pozwoli Ci zmienić wartość 25.0001 na 25 (pamiętaj, że 25 = 25.0 = 25.00; tu się nie zgubiły żadne liczby po przecinku, to jest poprawne zaokrąglenie do 2 miejsc). Kiedy będziesz chciał sprawdzić czy bmi > 25, to przed std::round-em było (25.0001 jest większe od 25), ale po już nie jest większe (jest równe). Po drugie, jak będziesz chciał wypisać zaokrągloną wartość, to pojawi się 25. std::cout tak działa, że domyślnie nie wyświetla nieznaczących zer. Jeżeli te wszystkie niuanse Ci odpowiadają, to bierz std::round.

Możesz jednak podejść do problemu inaczej. Możesz powiedzieć std::cout-owi żeby zmienił domyślne zachowanie i liczby zmiennoprzecinkowe wyświetlał Ci z dwoma miejscami po przecinku. Teraz Twoje zmienne mają wartości jakie miały (if bmi > 25 jest prawdą), tylko std::cout wyświetla je zaokrąglone. Robi się to tak:

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::fixed << std::setprecision(2);
    std::cout << 25.0001 << std::endl; // Wypisuje 25.00
}

 

+1 głos
odpowiedź 23 lipca 2020 przez Restej Dyskutant (8,690 p.)

Cześć, zainteresuj się funkcją round​​​​​​. Jeśli będziesz miał problem z jej użyciem odezwij się w komentarzu a naprowadzą cię jak poprawnie ją umieścić w kodzie :). Natomiast gorąco bym zachęcał byś spróbował sam. 

Podobne pytania

+1 głos
0 odpowiedzi 831 wizyt
0 głosów
1 odpowiedź 4,750 wizyt
–1 głos
2 odpowiedzi 1,551 wizyt
pytanie zadane 12 kwietnia 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...