Ich war es von VBScript gewohnt mir keine großen Gedanken über Datentypen etc. zu machen - und genau das ist mir eben in C# zum Verhängnis geworden.

Rechnet man 50/286 liefert VBS automatisch das Korrekte Ergebnis 0,17482517482517482517482517482517 zurück.

Rechnet man nun aber in C# mit zwei Integern, so funktioniert das nicht.

Falsch: (decimal)(maxWidth/fileWidth)

Der Grund: Wenn man zwei Integers (maxWidth und fileWidth) dividiert, so liefert das auch einen Integer als Ergebnis - bei dieser Operation also 0. Da nützt auch das casten in decimal nicht mehr, denn 0 bleibt 0.

Richtig: (decimal)((decimal)maxWidth/(decimal)fileWidth)

Man muss also bereits mit den richtigen Datentypen rechnen, um am Ende auch das richtige Ergebnis zu bekommen, sprich die verwendeten Variablen schon vor bzw. während der Operation casten.

Dein Kommentar