![]() |
[.NET] Math.Round() macht mich verrückt
Hi zusammen,
.NET macht mich noch wahnsinnig. Gibt es keine saubere Möglichkeit, das hier zu schreiben?
Code:
Da geht absolut jede Übersicht verloren.
intVal = Convert.ToInt32(Math.Round(Convert.ToDouble(tView.Height / 2)));
Minimal schöner wäre es so:
Code:
Das ist jedoch nicht zulässig:
intVal = Convert.ToInt32(Math.Round(tView.Height / 2));
Zitat:
Erwartet hätte ich eine solche Lösung:
Code:
Dass Math.Round() beim Runden auf 0 Nachkommastellen einen Double-Wert zurück gibt ist doch irgendwo krank. :wall:
intVal = Math.Round(tView.Height / 2);
Mit einem Typecast ginge es kurz, doch ich persönlich finde Typecasts unsauber, da man nicht exakt weiß, was da nun wie interpretiert wird (Holzhammermethode):
Code:
intVal = (int)(tView.Height/ 2)
Grüße, Matze |
Re: [.NET] Math.Round() macht mich verrückt
Von welchem Typ ist tView.Height? Diese Fehlermeldung mit dem Decimal kann ich mir im Moment nämlich nicht erklären. :gruebel:
Generell finde ich es meist undurchsichtiger, was eine Convert-Funktion macht als was ein Cast macht. Dein Cast würde btw immer abrunden, oder? |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Zitat:
Ich habe es lieber, wenn man exakt sehen kann, was mit den Werten passiert. Und das ist bei den Convert-Methoden der Fall. |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Zitat:
Zitat:
Lösung für Dein Problem:
Code:
Also einfach "2.0" statt "2" schreiben.
int d = 5;
int intVal = Convert.ToInt32(Math.Round(d / 2.0)); |
Re: [.NET] Math.Round() macht mich verrückt
Was gefällt dir denn an diesem Code nicht?
Code:
int intVal = treeView.Height / 2;
|
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Daher wundert mich, dass, abhängig von der Deklaration von intVal, du das hier nicht nutzt:
Code:
//Edit: Ach Mensch alzaimar, das war mein Part. :mrgreen:
intVal = tView.Height/ 2;
|
Re: [.NET] Math.Round() macht mich verrückt
Danke Christian, dann mache ich das so. :)
@Mark/Daniel: Ich habe immer ein ungutes Gefühl, wenn ich einem Integer einen Nicht-Integer zuweise, da damit irgendwas gemacht wird, was nicht auf den ersten Blick ersichtlich ist. Ich habe es gerne "typensicher", zumindest im Code. Ich mag zwar PHP mit seinen komplett fehlenden Typen, aber das ist eine andere Geschichte. Wobei die Beschreibung von Convert.ToInt32() auch nicht einleuchtender ist. Edit: 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: |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Zitat:
|
Re: [.NET] Math.Round() macht mich verrückt
Ich möchte damit nur eine Komponenten mittig positionieren. Also auf +/- einen Pixel kommt's mir da nicht an. Daher gingen beide Möglichkeiten.
Aber prinzipiell war es für mich mal interessant zu wissen, ob man das in C# bzw .NET sauber lösen kann. Meine Meinung ist: Jain mit Tendenz zu Nein. :stupid: |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
|
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:
|
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. |
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.
|
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:
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.
someVal = (int)Math.Round(obj.IntProperty / 2.0);
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. |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Zitat:
Zitat:
|
Re: [.NET] Math.Round() macht mich verrückt
Achso! Wenn du einfach nur das Verhalten von "div" willst, isses doch simpel:
Code:
Da macht C# schon nur eine Integerdivision.
someVal = obj.IntProperty / 2;
|
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
|
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
|
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
Btw: Auch seltsam, dass eine Runden-Funktion in "System" ist und eine in "Math". :mrgreen: |
Re: [.NET] Math.Round() macht mich verrückt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz