Don P: setInterval mit function "pointer" und parameter

Beitrag lesen

Hallo,

In C# etwa wäre myDate.Month vom Typ int, und durch 3 teilen geht damit nicht wirklich.

Wieso nicht? Was macht C# da so essentiell anders? Ist die Integer-Division in C# nicht definiert?

Doch, aber das Ergebnis ist Integer. Mit z.B. int a = 8; evaluiert der Ausdruck a/3 halt zu 2. Korrekt wäre 2,3333..., aber das ist kein Integer mehr, sondern decimal oder float.
Man müsste dann z.B. a/(float)3 notieren oder (float)a/3.

So gesehen könnte man ein Quartal also auch so ermitteln:
int quartal = (int)Math.Ceiling(myDate.Month / float(3));

Das sieht zwar einfacher aus als mit Convert.ToXXX(), aber die Typecasterei bleibt einem trotzdem nicht erspart.

Das ist umständlich - und ich glaube nicht, dass das notwendig ist.

Ist es aber. Eine sog. implizierte Kontertierung funktioniert nur, wenn der neue Datentyp den alten aufnehmen kann, also z.B. long (=int64) zu int (=int32).

im Fall von int dividiert durch int gibt er nicht mal eine [Fehlermeldung] aus.

Warum sollte er auch? Das ist doch eine ganz normale Operation.

Dass 8/3 == 2 gilt, findest du normal?

Das Ergebnis ist wieder int, was man selten haben will.

Doch, sicher - genau das will ich in geschätzten 99% aller Fälle haben. In den seltenen Fällen, wo ich als Ergebnis einer Operation, bei der die Operanden int sind, ausnahmsweise mal float bekommen möchte, muss ich halt einen der Operanden vorher nach float casten.

Ja, leider muss man dann halt casten. Das ist gerade das lästige im Vergleich zu JavaScript, wo man wirklich selten casten muss.

Es dürfte doch eher die Ausnahme sein, dass eine Interger-Division glatt aufgeht, jedenfalls im normalen Leben ;) Wo nimmst du denn die 99% her?
Wenn ein Compiler nicht einmal so etwas offensichtliches von selber "richtig" macht, was kann man dann erst bei komplizierten Aufgaben von ihm erwarten?

Die Typ-Fehlermeldungen heißen doch auf deutsch immer nur "Sag's mir, Programmierer, ich bin zu blöd." ;)

System.Convert.ToGrußFormel( "Don P" )