Jump to content
Unity Insider Forum

Frage zu double und float


cncrete

Recommended Posts

Hallöchen, 

Ich bin ein Anfänger und mache mein erstes Pong spiel.

Nun wollte ich das bei jeder Kollision die Geschwindigkeit des Balles vergrössert wird. Also habe ich den float speed = speed +0.1 gesetzt. Da kam die Fehlermeldung. Float kann nicht explizit in double umgewandelt werden. Als ich dann den float in einen double umgewandelt habe gab es immer noch probleme(und auch im restlichen code).

Dann habe ich einfach geschrieben

speed = speed +(1/10)

Und es funktionierte.

Kann mir das bitte einer erklären. Ich versteh es einfach nicht, es ist doch das gleiche???

 

Schonmal danke für alle Antworten

Link zu diesem Kommentar
Auf anderen Seiten teilen

float und double sind ähnliche Typen. Beides sind Gleitkommazahlen. float allerdings wird im Speicher mit 32 bits dargestellt, double hat - wer hätt's gedacht - 64 bits. Damit sind sowohl größere, als auch genauere kleine Zahlen darstellbar. Braucht man aber für Spiele in der Regel nicht.

Wenn man eine Kommazahl aufschreibt, muss diese ja einem dieser beiden Typen entsprechen. Mal davon abgesehen, dass er noch mehr geben kann. Und für C# ist eben definiert, dass ein Kommazahl-Literal ein double ist und kein float. Um ein Literal zu schreiben, das stattdessen ein float ist, musst du am Ende ein f anfügen:

speed = speed + 0.1f;
// bzw
speed += 0.1f;

Dein anderer Versuch funktioniert übrigens nicht - er kompiliert zwar, aber 1/10 = 0.

Wenn du ein Zahlliteral schreibst, das kein Komma hat, dann handelt es sich um ein int, also eine Ganzzahl. Und eine int-Division ergibt immer wiederum ein int. Sollte die Division eigentlich ein Ergebnis mit Nachkommastellen haben (also 0.1), werden diese abgeschnitten (also 0), was einem Abrunden entspricht. Du rechnest also immer 0 obendrauf, was den Compiler nicht stört, aber dir nichts bringt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...