Laden...

Min() zweier Gleitkommazahlen zurückgeben

Erstellt von Sw4t vor einem Jahr Letzter Beitrag vor einem Jahr 379 Views
S
Sw4t Themenstarter:in
25 Beiträge seit 2022
vor einem Jahr
Min() zweier Gleitkommazahlen zurückgeben

private float Min(float a, float b)
{
    //return a < b ? a : b;
    if (a < b)
        return (float)a;
    return (float)b;
}

float test = Min(8 / 7, 6 / 5); // Debugger: 1.0 (float)

Wieso rundet C# hier den Rückgabewert ab bzw. wieso liefert es mir nicht einfach 1.1428 (ca. 8/7)?
Wie bekomme ich es wie gewünscht hin?

2.079 Beiträge seit 2012
vor einem Jahr

Du übergibst "8/7" und "6/5", also 1 und 1. Überrascht? 😉

5, 6, 7 und 8 sind Int-Werte, wenn Du mit denen rechnest, kommt auch Int raus und Int erlaubt keine Nachkommastellen.

Du musst bei jeder Division mit einer Gleitkommazahl rechnen, damit der Compiler das auch weiß.

Heißt:


float test = Min(8F / 7F, 6F / 5F); 

Mit dem F sagst Du, dass die Zahl ein float ist.
Du kannst aber auch casten und wenn Du Variablen nutzt, die schon float sind, brauchst Du es natürlich auch nicht.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

S
Sw4t Themenstarter:in
25 Beiträge seit 2022
vor einem Jahr

Oh man. Float ist ein lästiger Datentyp. Danke dir 👍

6.911 Beiträge seit 2009
vor einem Jahr

Hallo Sw4t,

für Komplettheit: Math.Min ist eine Methode in .NET für das Minimum von 2 Werten.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.079 Beiträge seit 2012
vor einem Jahr

Oh man. Float ist ein lästiger Datentyp. Danke dir

Hat nix mit Float zu tun, gilt auch für die anderen Gleitkommazahlen.

Der Compiler sieht ja nur "Zahl" und wenn Du keinen Typ definierst, ist "Zahl" eben ein Int.
Und dass bei Int die Nachkommastellen abgeschnitten werden, ist technisch notwendig und auch gut so.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

S
Sw4t Themenstarter:in
25 Beiträge seit 2022
vor einem Jahr

Der Compiler sieht ja nur "Zahl" und wenn Du keinen Typ definierst, ist "Zahl" eben ein Int.

Danke, das wusste ich bislang noch nicht. 👍

für Komplettheit: Math.Min ist eine Methode in .NET für das Minimum von 2 Werten.

Hallo gfoidl,
Mit Math.Min() hatte ich das Problem, dass es mir ständig einen Integer lieferte. Nun weiss ich auch, warum. 😁