Migration Net48 nach csproj im SDK Format: Rundung bei floats

Martin S 0 Zuverlässigkeitspunkte
2024-07-01T20:53:20.9+00:00

Hallo,

ich erstelle eine C#-Konsolenanwendung mit .Net 4.8 VS 2022 (17.10.3).

In der Main ist folgender Code enthalten:

float f1 = 250000;
float f2 = 1.6f;
var result = f1 * (f2 / 100);
if (result == 4000f)           
    Console.WriteLine("Ok");           
else            
    Console.WriteLine("fail");            
Console.ReadLine();

Als Ergebnis wird "Ok" angezeigt.

Nun nutze ich den Upgrade Assistant (https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.upgradeassistant) um das Projekt auf dem SDK-Stand anzuheben. Also keine Migration nach .NET 8, sondern in .Net 4.8 die Projektdatei zum SDK-Format konvertieren.

Danach führe ich den Code erneut aus und es wird "Fail" ausgegeben.

Ich verstehe, dass das Rechnen mit float immer zu Rundungsproblemen führen kann, aber warum führt das Ändern des Projekt-Formates zu einem anderen Ergebnis und kann man dies wieder "korrigieren"?.

Danke und Gruß Martin

.NET
.NET
Microsoft-Technologien, die auf dem .NET-Softwareframework basieren.
28 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

1 Antwort

Sortieren nach: Am hilfreichsten
  1. Martin S 0 Zuverlässigkeitspunkte
    2024-07-02T07:51:04.7266667+00:00

    Hab die Ursache gefunden:

    mit der Migration wird die Buildoption "Prefer32Bit" entfernt und man startet automatisch in 64 bit.

    Dadurch wird der float anders gespeichert und man bekommt diesen Fehler.

    0 Kommentare Keine Kommentare

Ihre Antwort

Fragesteller*innen können Antworten als akzeptierte Antworten markiert werden, wodurch Benutzer*innen wissen, dass diese Antwort das Problem gelöst hat.