printf("%2.3d",a)
3 oznacza, że liczbę ma zaokrąglić do 3 miejsca po przecinku, a 2 co oznacza ?
float a = 1.2f
a tutaj co oznacza te f ?
printf("%2.3d",a)
3 oznacza, że liczbę ma zaokrąglić do 3 miejsca po przecinku, a 2 co oznacza ?
float a = 1.2f
a tutaj co oznacza te f ?
https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#q=c%2B%2B%20number%20with%20f
http://stackoverflow.com/questions/4828167/purpose-of-a-f-appended-to-a-number
https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#q=printf+formatting+c%2B%2B&spell=1
http://www.cplusplus.com/reference/cstdio/printf/
Z twoich linków napotkałem taki tekst i program:
By default 3.2 is treated as double; so to force the compiler to treat it as float, you need to write f at the end.
Just see this interesting demonstration:
float a = 3.2;
if ( a == 3.2 )
cout << "a is equal to 3.2"<<endl;
else
cout << "a is not equal to 3.2"<<endl;
float b = 3.2f;
if ( b == 3.2f )
cout << "b is equal to 3.2f"<<endl;
else
cout << "b is not equal to 3.2f"<<endl;
w pierwszym ifie a nie jest równe 3.2 , a w drugim przypadku jest równe 3.2. Czy dobrze to rozumiem, że jak dodamy na koniec f (float b = 3.2f) to wtedy zmienna float ma dokładność typu double ?
Co oznacza słówko treat ? Bo ciągle się spotykam z tłumaczeniem leczyć.
Dodanie "f" powoduje, że stała jest traktowana jako float, bo domyślnie kompilator uznaje ją za double, w przypadku nadania wartości zmiennej 'a' Visual rzucił by warning z tym związany. Ponieważ 3.2 we float i 3.2 w double prawdopodobnie (a wręcz na pewno) różnią się na którymś miejscu po przecinku dlatego pierwszy warunek daje false. W drugim ifie porównujesz wartości float i dlatego są one równe. Związane jest to z reprezentacją liczb zmiennoprzecinkowych ;)
a jaki jest sens takiego zapisu float a = 1.2f ? ma to jakiś sens ?
Sens jest taki, że mówisz kompilatorowi, że chcesz wartość 1.2
jako float
. Bez tego kompilator uznaje, że chcesz wartość 1.2
jako double
, a potem przy przypisaniu do float
zrobi rzutowanie tracąc na precyzji. Przy okazji rzuci warningiem żeby nie było, że nie dba o programistę.
Niezależnie od tego, czy to jest float
czy double
, nie powinno się sprawdzać równości za pomocą ==
, z powodu niedokładności zapisu. Zazwyczaj się przyjmuje pewien zakres i jeśli różnica 2 liczb jest w tym zakresie to się je uznaje za równe.
dobra już rozumiem w ifie należy dać 1.2f aby kompilator wiedział, że chodzi o zmienną float.
A mógłby jeszcze ktoś objaśnić jak mam 2.3f w printf to liczbe float zaokrągli do 3 miejsca po przecinku i wypisze 2 maksymalnie cyfry z lewej strony ?
2.3f zadziała dokładnie jako 3.3 i 4.3.
%6.3f
- wypisze z 3 znakami po przecinku całość dobije spacjami z lewej do 6 znaków (2 z lewej).