Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Anfängerfehler (https://www.delphipraxis.net/53513-anfaengerfehler.html)

faux 18. Sep 2005 08:21


Anfängerfehler
 
Kann mir das wer erklären:

Code:
(...)
private double max;
(...)
this.max = 99991; //Beispiel
(...)
double up = (Console.WindowWidth - 3) / this.Max; //Ergibt 0
double up = (double)(Console.WindowWidth - 3) / this.Max; //Ergibt das richtige (zB 0,00008000720065)
Ich kappier das nicht, wieso ich das Ergebnis per Carting in double Umwandeln muss, obwohl ich es einer double Variable zuweise... :?

Faux

Robert Marquardt 18. Sep 2005 08:35

Re: Anfängerfehler
 
Vermutlich wird der Operator / auf Integern auch nur ein Integer-Ergebnis liefern. Bei Delphi gibt es zwei Operatoren / und div, wobei / immer ein Double (Extended?) liefert.
I

faux 18. Sep 2005 08:39

Re: Anfängerfehler
 
Ja, das mit Delphiist mir bekannt, deswegen dachte ich, dass es auch in C# so ist...

Khabarakh 18. Sep 2005 09:32

Re: Anfängerfehler
 
:gruebel:
Code:
   class TestClass
   {
      private double max = 99991;
      private int WindowWidth = 10; // Console.WindowWidth gibts in 1.1 nicht
      
      public void Test()
      {
         double up = (WindowWidth) / max; // Ergibt 0,00010009...
         Console.WriteLine(up);
         up = (double)(WindowWidth) / max; // Ergibt 0,00010009...
         Console.WriteLine(up);
      }
   }
Funktioniert beides perfekt. Ich kann mir nicht wirklich vorstellen, dass sie in C# 2.0 die impliziten Konvertierungen verändert haben :gruebel: .

faux 18. Sep 2005 13:33

Re: Anfängerfehler
 
Ich hab mich schon grün und blau geärgert, und nichte gefunden woran es liegt, dass bei so einer simplen Division immer 0 raus kommt. Dannhab ich mir beide Faktoren per Diagnostics.Debug.WriteLine ausgeben lassen und die waren eben 80 und 99991. Ich hab dann in meiner Verzweiflung einfach ein Carting reingehauen - dann gings. - Ohne Carsting wieder net... :wall:

Will wer die ganze Klasse sehen (ca 20 Zeilen)?

Faux

Sergej 18. Sep 2005 13:44

Re: Anfängerfehler
 
Tag. Ja gib mal bitte die ganze Klasse.


[edit] Also ich kann das Ergebnis von Khabarakh mit .NET Beta 2 bestätigen. [/edit]



Greetz Sergej

MathiasSimmack 18. Sep 2005 13:52

Re: Anfängerfehler
 
Zitat:

Zitat von faux
Ohne Carsting wieder net... :wall:

:mrgreen:

Sergej 18. Sep 2005 13:59

Re: Anfängerfehler
 
:mrgreen: Alle habens gesehen und alle haben sich beherrscht..und dann kamst du :zwinker:


@Faux: Was er damit sagen wollte, es heißt : Casting ;-)


Greetz Sergej

faux 18. Sep 2005 14:37

Re: Anfängerfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, weiß ich doch nicht wie das Zeug heißt... :roll: Ich weiß wie man es anwendet und das reicht mir... :wink:
Zeile 66.
Code:
  class SaveThread
  {
    private Thread InternalThread;
    public Thread Thread
    {
      get
      {
        return this.InternalThread;
      }
    }
    #region Variablendeklaration
    /*** Hier wären noch ein paar restliche Variablen ***/
    private int Max;
    public int Maximum
    {
      get
      {
        return this.Max;
      }
      set
      {
        this.Max = value;
      }
    }
    private double Percent = 0;
    public double Percentage
    {
      get
      {
        return this.Percent;
      }
    }
    #endregion
    public SaveThread()
    {
      this.InternalThread = new Thread(new ThreadStart(Execute));
    }
    public void Execute()
    {
      System.IO.StreamWriter file = new System.IO.StreamWriter(this.SaveFileName);
      file.WriteLine("Text;MD5");
      //********* HIER IS DIE ZEILE: *********//
      double up = (double)(Console.WindowWidth - 3) / this.Max; //Hier ist das CASTING ohne r
      foreach (Types.OutputStruct value in this.DataArray)
      {
        file.WriteLine(value.Text + ";" + value.MD5);
        this.Percent += up;
      }
      file.Close();
    }
  }
}
Da müsste es doch völlig egal sein, ob ich jetzt ein Casting mache, oder nicht, oder???

Ich denke nicht, dass es an der Klasse liegt. Eher am Rest des Codes:

Ausschnitt vom Code:
Code:
Console.Write("Pfad> ");
SaveThread Save = new SaveThread();
Save.FileName = Console.ReadLine();
Save.Maximum = Schleife.Maximum;
Save.Data = Schleife.Output;
Save.Thread.Start();
while (Save.Thread.IsAlive)
{
  string Bar = "";
  for (int i = 0; i < Console.WindowWidth - 3; i++)
  {
    if (i < Save.Percentage * (Console.WindowWidth - 3))
      Bar += "=";
    else
      Bar += " ";
  }
  Console.Write("[" + Bar + "]");
  Console.Write('\r');
@MathiasSimmack: Da hab ich aber schon vieel peinlichere Fehler in der DP gesehen.... :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 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