Wypisywanie ilości cyfr po przecinku w ostringstream (allegro 5)

0

Jak zaokrąglić liczbę w ostringstream?

(biblioteka ALLEGRO 5)

float test = 1.0f
std::ostringstream testSS;
testSS << test;
al_draw_text(Czcionka,al_map_rgb(255,255,255),pozycja_x,pozycja_y,ALLEGRO_ALIGN_LEFT,(testSS.str()).c_str());
test += 0.01f;

podczas tego al_draw_text wyswietla mi na ekranie np. 1000.56, a ja chciałbym zrobić coś takiego:
1000.01 = 1000
1000.49 = 1000
1000.51 = 1000
1000.99 = 1000
1001.01 = 1001
itd. itp.

//EDIT
Może źle to ująłem... Nie tyle co zaokrąglić, ale wyświetlić ilość cyfr po przecinku... Pamiętam że w Pascalu robiło to się w sposób pisz0, czyli 0 miejsc przed i 0 po...

0
#include <iomanip>

testSS << std::setprecision(0) << test; 
0

Teraz wyświetla mi 2e+001

0

To spróbuj tak

testSS << std::fixed << std::setprecision(0) << test;
0

Działa, dziękuję bardzo :)

0

a nie prościej zrobić cast na int'a testSS << (int)test? Zwłaszcza, że z opisu wynika, że chcesz zaokrąglać w dół, a nie do najbliżej liczby całkowitej (a tak zrobi testSS << std::fixed << std::setprecision(0) << test).

0

A jak "sprecyzować" liczbę podczas jej dodawania?
Oto przykład:

float Liczba = 0;
do{
    Liczba += 0.001f;
while(cos != 0);

No i zamiast 0.001 dodaje mi np. 0.001000049860 w takim stylu, jak to sprecyzować np. do 4 miejsca po przecinku?

0

Tak samo jak do 0 miejsc po przecinku (tylko zamiast 0 podajesz 4).

0

Nie da się tego "sprecyzować" na liczbach rzeczywistych ponieważ nie da się w żadnym typie wbudowanym zapisać dokładnie 0.1 tak jak 1/3 w systemie dziesiętnym jest liczbą ułamkiem z nieskończoną ilością znaków po przecinku tak samo 1/10 - w systemie binarnym. W związku z czym zawsze jest pewne przybliżenie. Więc zawsze będzie pewien błąd. Możliwe że wystarczy ci odpowiedź od @DRK: cout << fixed << setprecision(4) << Liczba;

0

Aha :/
A ja mam jeszcze taki problem, że jak pisze to cout << fixed << setprecision(4) << Liczba; to wyświetla mi to w konsoli... A tego bym nie chciał, bo mi wtedy "muli" gra... Jak usuwam cout to z kolei mi błąd wywala... Ja zwiększam tą liczbę, potem ją zaokrąglam, a potem jest ona dodawana do przesuwania (żeby ruszać obiektami), tylko nie chce, aby pisało mi to w konsoli, tylko w oknie gry, czyli musi być bez cout :/

0
Temessis napisał(a):

tylko nie chce, aby pisało mi to w konsoli, tylko w oknie gry
No to w czym problem? Przecież wiesz jak zamienić liczbę na napis o odpowiedniej precyzji. Zrób to podobnie jak przedstawiałeś w swoim pierwszym poście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1