AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [.NET] Math.Round() macht mich verrückt
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Matze · begonnen am 12. Dez 2009 · letzter Beitrag vom 12. Dez 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#11

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

  Alt 12. Dez 2009, 14:58
Ebens. Jeder C-ler würde in Tränen ausbrechen, würde man ihm erzählen, Typecasts seien schmutzig.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#12

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

  Alt 12. Dez 2009, 15:08
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.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#13

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

  Alt 12. Dez 2009, 15:12
Ja das geht natürlich. ICh wollte nur wissen, ob das mit Hausmitteln aus funktioniert. Dennoch danke für den Tipp.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#14

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

  Alt 12. Dez 2009, 16:18
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#15

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

  Alt 12. Dez 2009, 16:22
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? Gib mal ein Beispiel.

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 von Matze:
...ob man das in C# bzw .NET sauber lösen kann. Meine Meinung ist: Jain mit Tendenz zu Nein.
Das ist Gewohnheit. In Delphi würdest du das mit DIV lösen. C# ist da etwas transparenter.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#16

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

  Alt 12. Dez 2009, 16:34
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

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

  Alt 12. Dez 2009, 16:40
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.
Für mich wäre es Blödsinn, wenn eine Funktion mal double und mal int liefern würde.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#18

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

  Alt 12. Dez 2009, 16:42
Zitat von alzaimar:
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? Gib mal ein Beispiel.
3/2 ergibt 1, während Math.Round(3/2.0) 2 ergibt.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#19

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

  Alt 12. Dez 2009, 17:19
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".
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#20

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

  Alt 12. Dez 2009, 18:30
Zitat von Christian S.:
3/2 ergibt 1, während Math.Round(3/2.0) 2 ergibt.
Ich werds nie lernen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
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