Programmier Fehler cannot convert from double to float?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Zeile 30 könnte das Problem sein. Dort wird eine double-Multiplikation durchgeführt, weil die Zahl "0.25" ein double-Literal ist, so dass der Methode Mathf.RoundToInt eine double-Zahl übergeben wird, diese aber eine float-Zahl erwartet. Versuch mal ein float-Literal zu verwenden und schreib "0.25f" statt "0.25". Überprüf auch den Datentyp von GlobalCookies.CookieCount und schau nach, ob der float oder double ist. Der sollte auch float sein.

Von double nach float wird nämlich nicht implizit konvertiert. Du musst ein sogenanntens Typecasting machen, um eine double-Zahl zu einer float-Zahl zu konvertieren. Das liegt daran, weil der Wertebereich von double größer ist, als der von float. Mehr dazu findest du hier: Numerische Gleitkommatypen (C#-Referenz)

Ein Typecasting von double und float machst du so:

double meineDoubleZahl = 0.25;
float meineFloatZahl = 0.25f;

// Typecasting nötig
meineFloatZahl = (float) meineDoubleZahl;

Die einzige float-Variable, die ich auf deinem Bild sehe, heißt cookieCheck und zu dieser finde ich nur eine Zuweisung (Zeile 17). Dort sollte dann also wohl der Fehler sein (lies dir künftig Fehlermeldungen richtig durch und gebe alle Informationen an, wenn du andere dazu um Hilfe bittest).

CookieCount ist vermutlich vom Typ double und die Division wird daher auch ein Ergebnis für diesen Datentyp liefern. Du benötigst einen Typecast.

Entweder du castest den double-Wert im Voraus:

float result = (float) dividend / divisor;

oder du konvertierst das Ergebnis zum richtigen Datentyp:

float result = (float) (dividend / divisor);

Noch eine andere Alternative wäre es, den Typ des Properties zu ändern, doch inwiefern das Sinn macht, müsste erst geprüft werden. Vielleicht benötigst du diese Präzision ja irgendwo.

Ich programmiere in dieser Sprache nicht, aber in Java bekommt man diese Meldung jedes Mal, wenn man versucht an Float einen Wert der Form "X.Y" zuzuweisen, da dies ein double-Literal ist. Float-Literal ist "X.Yf"

Jede Rechnung mit Double liefert als Wert Double zurück, also bekommt man die Meldung auch, wenn man etwas schreibt wie

float a = 1.5f;
double b = 2;
a = a * b;

Üblicherweise kann man explizit casten, also z.B. schreiben

a = a * (float)b;

Um das Problem zu umgehen.