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.