Jak zaokrąglić do 3 miejsc po przeinku?

infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

Witam. Miałem napisać program, który wyliczy pole i obwód koła... Jednak wynik trzeba zaokrąglić do 3 miejsc po przecinku i mam z tym problem. Proszę o pomoc.

Kod: Zaznacz cały

#include <math.h>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int r;
cin>>r;
cout<<2*M_PI*r<<endl;
cout<<M_PI*r*r;
system("pause");
return 0;
}
Ostatnio zmieniony 9 sty 2011, o 00:55 przez Lbubsazob, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
PMichalak
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 29 paź 2009, o 20:03
Płeć: Mężczyzna
Lokalizacja: Kalisz
Podziękował: 1 raz
Pomógł: 16 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: PMichalak »

Kod: Zaznacz cały

cout.precision(3);
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

ok tylko gdzie dokladnie mam to wstawic bo cos nie wychodzi?-- 9 sty 2011, o 00:05 --W tym "cout.precision(3);" dobrze zaokrągla jeżeli jest wynik trzycyfrowy, natomiast jeżeli jest liczba dwucyfrowa to zaokrągla do 4 miejsc po przecinku, natomiast przy jednocyfrowej do 5.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: spajder »

Pomnóż przez \(\displaystyle{ 1000}\), utnij część ułamkową, podziel przez \(\displaystyle{ 1000}\)
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

Ok, dzięki. A jeżeli miałbym tylko podać jakąś liczbę np. 14.07456453 z dokładnością (nie zaokrągleniem) do 3 miejsc po rpzecinku??
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: Zordon »

Kod: Zaznacz cały

printf("%.3f",liczba);
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: kropka+ »

Pomnóż przez 1000. Z tego weź mantysę (część ułamkową liczby) i sprawdź czy jest mniejsza od 0,5:
jeśli tak to utnij część ułamkową i podziel przez 1000
jeśli nie to zrób jak wyżej i dodaj 0,001.
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

Zordon pisze:

Kod: Zaznacz cały

printf("%.3f",liczba);
Ta metoda jest dużo prostsza, tylko co to jest "f"???
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: wawek91 »

infeq pisze:Ta metoda jest dużo prostsza, tylko co to jest "f"???
printf jest funkcją w języku C, a z tego co widzę Ty piszesz w C++, a 'f' odnosi sie tutaj do liczb zmiennoprzecinkowych (np. float). Chcąc wypisać wartość zmiennej zmiennoprzecinkowej należy właśnie zastosować 'coś takiego'. Gdybyśmy chcieli wypisać wartość zmiennej całkowitej zamiast 'f' byłoby 'd'. Na przyszłość jednak polecam skorzystanie z wujka google, tam jest wszystko ładnie opisane.
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

Bardzo jeszcze przepraszam ale gdzieś jest błąd. Wówczas wyskakuje informacja na stronie, gdzie się to sprawdza, że:
"1 wiersz 1: wczytano '1393472.271', a oczekiwano '1396263.402'
2 wiersz 1: wczytano '380.133', a oczekiwano '380.181'"


Gdzie jest błąd?

#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int r;
scanf("%d", &r);
printf("%.3f",M_PI*r*r);
printf("\n");
printf("%.3f",2*M_PI*r);
system("pause");
return 0;
}
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: wawek91 »

Ok to mam podstawowe pytanie. Piszesz w C czy C++?
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: infeq »

pisalem w c++ ale ta funkcja "printf("%.3f",liczba);" nie wychodzila w c++, więc pozmienialem
kod3r
Użytkownik
Użytkownik
Posty: 61
Rejestracja: 9 sty 2010, o 22:06
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: kod3r »

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

int main()
{
    int r;
    scanf("%d", &r);
    printf("%.3f",M_PI*r*r);
    printf("
");
    printf("%.3f",2*M_PI*r);
    //system("pause");
    return 0;
}
U mnie to działa poprawnie. Możesz podać jakie r wczytujesz i co jest nie tak, bo jakoś nie mogę zrozumieć o co dokładnie Ci chodzi. Jeśli zaokrąglanie to jest ok, sprawdzałem dla kilku różnych r.
abc666

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: abc666 »

c++

Kod: Zaznacz cały

cout.setf(std::ios_base::fixed);
cout.precision(3);
cout.setf(std::ios_base::showpoint)
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

Jak zaokrąglić do 3 miejsc po przeinku?

Post autor: wawek91 »

kod3r, zauważ, że Ty dołączasz bibliotekę stdio.h natomiast infeq, iostream. infeq, skompilowałem Twój kod pod dev-c++ i wszystko ładnie śmiga pomimo tej biblioteki.
ODPOWIEDZ