Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [.NET] Math.Round() macht mich verrückt (https://www.delphipraxis.net/144626-%5B-net%5D-math-round-macht-mich-verrueckt.html)

Mithrandir 12. Dez 2009 13:58

Re: [.NET] Math.Round() macht mich verrückt
 
Ebens. Jeder C-ler würde in Tränen ausbrechen, würde man ihm erzählen, Typecasts seien schmutzig. :mrgreen:

sx2008 12. Dez 2009 14:08

Re: [.NET] Math.Round() macht mich verrückt
 
Schreib' Dir doch eine Klassenmethode oder Funktion namens RoundInt() die sämtliche Typecasts übernimmt.
Das hat zusätzlich den Vorteil, dass du Round() später durch etwas anderes ersetzen kannst.

Matze 12. Dez 2009 14:12

Re: [.NET] Math.Round() macht mich verrückt
 
Ja das geht natürlich. ICh wollte nur wissen, ob das mit Hausmitteln aus funktioniert. Dennoch danke für den Tipp.

Medium 12. Dez 2009 15:18

Re: [.NET] Math.Round() macht mich verrückt
 
Ich vermute mal, dass die Division durch eine Ganzzahl hier zusätzliche Verwirrung bringt. Ich mach's oft so:
Code:
someVal = (int)Math.Round(obj.IntProperty / 2.0);
das ".0" ist der wichtige Part hier, durch den die Division ein Double-Ergebnis liefert und damit eindeutig ist. Auch ginge es mit dem Suffix "f" hinter der 2, was dann in einem Single (float) resultieren würde.

Edit: Was man als Delphianer erstmal verinnerlichen muss ist, dass "/" bei Divisionen von zwei Ganzzahltypen dem "div" aus Delphi entspricht. Er wird aber zu einem Fließkomma-Operator, sobald eine solche beteiligt ist. Das Ergebnis des Operators entspricht dem genausten an der Division beteiligten Operanden, und nicht mehr.

alzaimar 12. Dez 2009 15:22

Re: [.NET] Math.Round() macht mich verrückt
 
Zitat:

Zitat von Christian S.
Integer dividiert durch Integer ergibt in C# wieder einen Integer! Das Ergebnis ist halt nur nicht dasselbe wie beim Runden ;-)

Äh...nicht? :gruebel: Gib mal ein Beispiel.

Zitat:

Zitat von Matze
Ich möchte damit nur eine Komponenten mittig positionieren. Also auf +/- einen Pixel kommt's mir da nicht an.

Äh, na ja. halbe Pixel gibts nun mal nicht.

Zitat:

Zitat von Matze
...ob man das in C# bzw .NET sauber lösen kann. Meine Meinung ist: Jain mit Tendenz zu Nein. :stupid:

Das ist Gewohnheit. In Delphi würdest du das mit DIV lösen. C# ist da etwas transparenter.

Medium 12. Dez 2009 15:34

Re: [.NET] Math.Round() macht mich verrückt
 
Achso! Wenn du einfach nur das Verhalten von "div" willst, isses doch simpel:
Code:
someVal = obj.IntProperty / 2;
Da macht C# schon nur eine Integerdivision.

alzaimar 12. Dez 2009 15:40

Re: [.NET] Math.Round() macht mich verrückt
 
Zitat:

Zitat von Matze
Um nochmals auf die von mir angesprochene Problematik zurückzukommen:
Was ist der Sinn dahinter, dass Math.Round() bei fehlender Angabe der Nachkommastellen und somit einem Runden auf eine Ganzzahl einen Double zurück gibt? Das ist für mich völliger Blödsinn. :gruebel:

Für mich wäre es Blödsinn, wenn eine Funktion mal double und mal int liefern würde.

Christian S. 12. Dez 2009 15:42

Re: [.NET] Math.Round() macht mich verrückt
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von Christian S.
Integer dividiert durch Integer ergibt in C# wieder einen Integer! Das Ergebnis ist halt nur nicht dasselbe wie beim Runden ;-)

Äh...nicht? :gruebel: Gib mal ein Beispiel.

3/2 ergibt 1, während Math.Round(3/2.0) 2 ergibt.

Matze 12. Dez 2009 16:19

Re: [.NET] Math.Round() macht mich verrückt
 
Zitat:

Zitat von alzaimar
Für mich wäre es Blödsinn, wenn eine Funktion mal double und mal int liefern würde.

Da ist natürlich was dran. In Delphi nutze ich immer "System.Round", wenn ich auf ganze Zahlen runde und "Math.RoundTo" für das Runden auf Nachkommastellen. Daher ist mir das nie aufgefallen.

Btw: Auch seltsam, dass eine Runden-Funktion in "System" ist und eine in "Math". :mrgreen:

alzaimar 12. Dez 2009 17:30

Re: [.NET] Math.Round() macht mich verrückt
 
Zitat:

Zitat von Christian S.
3/2 ergibt 1, während Math.Round(3/2.0) 2 ergibt.

Ich werds nie lernen. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz