Scatterhead [ łapaj dzień ]
Krótkie pytanie z c++
dlaczego ten program wypisuje 0, zamiast 0.(3)??
int main(int argc, char *argv[])
float r = 3/10;
printf("r: %f\n",r);
system("PAUSE");
return EXIT_SUCCESS;
ronn [ moralizator ]
Ta linijka :
printf("r: %f\n",r);
tu masz odp :
Scatterhead [ łapaj dzień ]
cout << "r: " << r; - pokazuje 0
printf("r: %e\n",r); - pokazuje 0.000000e+000
printf("r: %E\n",r); - pokazuje 0.000000E+000
printf("r: %e\n",r); - pokazuje 0
printf("r: %o\n",r); - pokazuje 0
printf("r: %u\n",r); - pokazuje 0
printf("r: %x\n",r); - pokazuje 0
Scatterhead [ łapaj dzień ]
prosze, pomocy
Jeremy [ Konsul ]
float r = 3/10;
Spróbuj:
float r = (float)3/(float)10;
wysia [ Senator ]
printf("r: %4.2f\n",r);
Chyba. C++ ostatnio dotykalem jakies 10 lat temu.
Scatterhead [ łapaj dzień ]
nie tutaj nie ma problemu z wypisywaniem jak pokazuje [3].
jest problem z tym, że float r = 10/3 nie przypipsuje wcale 3.333, tylko zero.
dopiero po r = (float)10/(float)3 dobrze przypisuje. Wielkie dzieki Jeremy
maVes [ Generaďż˝ ]
Scatterhead -> problem wynika z faktu, że operator dzielenia to dwa różne operatory. Jeżeli po jego prawej stronie stoi liczba całkowita, to wynik jest również całkowity. Wynik jest rzeczywisty, jeśli liczba po prawej stronie jest typu rzeczywistego.
Działanie napisane w taki sposób powinno już działać:
float r = 10/3.0;
Oczywiście sposób pokazany przez Jeremego również jest dobry :)

Jeremy [ Konsul ]
Nie ma za co.
Jednak sposób maVesa proponuję - sprawia że nie zapomnisz o właściwości operatora ;)