Podręcznik

2. Tablice wielowymiarowe

2.2. Formatowanie wydruków

Sterowanie sposobem prezentacji liczb zmiennoprzecinkowych jest możliwe poprzez ustalenie ich formatu i precyzji. Dostępne są trzy formaty:

  1. Format ogólny pozwala na wyświetlanie liczb możliwie najdokładniej uwzględniając dostępne miejsce. Precyzja w tym przypadku oznacza maksymalną liczbę cyfr.
  2. Format naukowy prezentuje wartość w postaci wykładniczej z jedną cyfrą przed kropką dziesiętną i wykładnikiem. Precyzja określa maksymalną liczbę cyfr po kropce.
  3. Format stały prezentuje wartość w sposób naturalny, taki do jakiego jesteście przyzwyczajeni. Zawsze występuje część całkowita, po której występuje część ułamkowa. Precyzja określa liczbę cyfr po kropce.
Domyślna precyzja w C++ wynosi 6, co oznacza że liczba 0.123456789 będzie wyświetlona jako 0.123457.
W przypadku wyjścia strumieniowego ustawienie obu parametrów w C++ najwygodniej jest wykonać za pomocą standardowych manipulatorów. Jest to zbiór funkcji do manipulowania stanem strumienia. Tak więc precyzję będziemy ustalali za pomocą manipulatora setprecision, natomiast wymuszenie formatowania stałego bądź naukowego jest możliwe poprzez wybór formatu fixed lub scientific.

Przykład wyjaśnia, jak ustawić precyzję, natomiast aby zmienić tryb wypisywania na naukowy, podajemy:

  cout << scientific;

Natomiast  tryb stałoprzecinkowy ustawiamy tak:

 cout << fixed;

Bardzo ważne jest też ustawienie równej szerokości pól przeznaczonych na drukowanie liczb. Szerokość pola wydruku ustawia się następująco (uwaga: dla każdej drukowanej pozycji osobno):

  cout << setw(7);

A oto najwygodniejszy sposób, który pozwala w jednej instrukcji ustawić format, precyzję i szerokość wydruku, np.

  cout << fixed << setprecision(3) << setw(6) << x << y  <<endl;
Aby uzyskać wydruk liczb z tablicy w ładnych, równych kolumnach (o jakiejś szerokości w) i z wymaganą precyzją d miejsc po kropce dziesiętnej, najprościej jest dołączyć bibliotekę iomanip i używać tych standardowych manipulatorów w sposób podany poniżej.

a) przed drukowaniem czegokolwiek ustawić stały format wydruku za pomocą manipulatora fixed (tzn. w postaci naturalnej, z kropką dziesiętną) oraz precyzję wydruku, czyli liczbę miejsc po kropce, używając manipulatora setprecision, w sposób następujący:

 cout << fixed << setprecision(d);

wartość d może być oczywiście konkretną liczbą.

b) w instrukcji drukowania przed wyprowadzeniem jakiejś wartości podać, jaką szerokość w ma ona zająć, używając manipulatora setw, np.:

cout << setw(4) << x << setw(7) << y << endl;

albo:

cout << setw(12) << x[i][j]; 

Oczywiście precyzję można ustawiać tak jak szerokość wydruku - w pętli, do każdej drukowanej wartości inną.