Frage von julib5432112345, 46

Warum gibt ein Bruch in C++ den Wert Null zurück?

Wenn ich in C++ einen Float-Datentyp definiere und ich ihn weiße ihm den Wert 1 / 2 zu. Wenn ich ihn jedoch ausgeben lasse behauptet er die Variable sei 0.

float test = 1 / 2;

float test = 0.5; funktioniert.

Ich habe keine Ahnung woran es liegt und wie ich mein Resultat erhalte. Ich wäre um Tipps dankbar, Julian.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Roach5, 25

Informiere dich mal über den Begriff "typecasting".

Wenn du folgenden Code hast:

float test = 1/2;

Dann initialisiert das Programm erstmal eine Variable, dann rechnet es die Division der Integers 1/2 durch und schreibt das Ergebnis in den dazugehörigen Speicherplatz. Der springende Punk ist, dass Integer-division durchgeführt wird, in dieser wird immer abgerundet. Es gilt also 1/2 = 0.

Du kannst dem Programm sagen, dass es keine Integerdivision durchführen soll, indem du typecastest, also eine der beiden Zahlen zu einer float machst, dann wird normale float-division durchgeführt.

Beispiel:

float test = ( (float) 1)/2;

Oder einfacher:

float test = 1./2;

Sobald du 1. schreibst, wird die 1 als eine Fließkommazahl interpretiert und ist automatisch eine float.

LG

Antwort
von iokii, 32

1 ist ein integer , 2 ist auch ein integer , wenn du 1 durch 2 teilst, ist das also eine Integerdivision, und somit ist das Ergebnis auch ein Integer, wird also abgerundet zu 0. Dass das danach einem float zugewiesen wird ist dem Compiler in dem Moment der Rechnung wohl egal.

Antwort
von priesterlein, 28

Weise ihm doch mal 1.0 / 2.0 zu oder oder 1.0f / 2.0f oder caste deine Integer auf einen float oder double bevor du sie verrechnest oder ändere die Rundung von Integer von "Nachkommastellen vergessen" auf richtige Rundungsregeln, damit dann 1 statt 0 rauskommt, was dir auch nichts helfen wird.

Keine passende Antwort gefunden?

Fragen Sie die Community