Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aus eine Listbox Kommazahlen herrausbekommen (https://www.delphipraxis.net/177141-aus-eine-listbox-kommazahlen-herrausbekommen.html)

hors 18. Okt 2013 19:49

Aus eine Listbox Kommazahlen herrausbekommen
 
Hallo,
ich habe ein Problem :

Delphi-Quellcode:
for i:= 0 to ListBox3.Items.Count -1 do
 gesamt := StrToFloat(ListBox3.Items[i]) + gesamt;

       for i:= 0 to ListBox4.Items.Count -1 do
       gesamt2 := StrToFloat(ListBox4.Items[i]) + gesamt2;

          ergebnis := gesamt2 - gesamt;

  edit5.text := FloatToStrF(ergebnis,ffnumber,8,2);
gesamt,gesamt2,ergebnis und i sind double
Wenn es integer sind klappt es.

Ich hoffe Ihr könnt mir helfen:-D!

lg hors

Perlsau 18. Okt 2013 20:10

AW: Aus eine Listbox Kommazahlen herrausbekommen
 
1. Was meinst du mit "klappt es"?

2. Was "klappt" nicht?

3. Gibt es eine Fehlermeldung?

4. Wenn ja, wie lautet sie denn?

5. Stichwort Fehlerbehandlung: Was machst du, wenn in deinem String weder ein Float- noch ein Integerwert steht?

6. Schau dir in deiner Online-Hilfe TryStrToFloat an.

Ansonsten ist das sicher auch äußerst hilfreich: Wie stelle ich Fragen richtig?

himitsu 18. Okt 2013 20:20

AW: Aus eine Listbox Kommazahlen herrausbekommen
 
Zitat:

und i sind double
Schau mal nach, was Items.Count für ein Typ ist und vorallem was Items[i] für einen Typ als Parameter haben "will".

Aber genau das betrifft "Punkt 4" meines Vorredners, denn das sollte der Compiler ganz genau benennen.

Zitat:

Wenn es integer sind klappt es.
Was Dieses dann übrigens auch erklärt.



Und wenn das der ganze Code sein sollte, dann müßte der Compiler auch Warnungen ala "Variable ... ist nicht initialisiert" ausgeben.

Sir Rufo 19. Okt 2013 00:17

AW: Aus eine Listbox Kommazahlen herrausbekommen
 
Du solltest einen anderen Ansatz verfolgen:

Lese die Werte nicht aus den Listboxen, sondern nutze diese nur zum Anzeigen (dafür sind die da).
Die Werte selber in einem
Delphi-Quellcode:
array of double
oder
Delphi-Quellcode:
TList<double>
verwalten.

Dann wird der Rest ein Spaziergang ;)

Hier der Spaziergang in Code-Zeilen
Delphi-Quellcode:
unit Main_FormU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls;

type
  TValueArray = array of Double;

  TMain_Form = class( TForm )
    ValuesA_ListBox : TListBox;
    ValuesB_ListBox : TListBox;
    ValueSumA_Label : TLabel;
    ValueSumB_Label : TLabel;
    Result_Label : TLabel;
    RandomData_Button: TButton;
    procedure RandomData_ButtonClick( Sender : TObject );
  private
    FValuesA : TValueArray;
    FValuesB : TValueArray;
    FSumA :   Double;
    FSumB :   Double;
    FResult : Double;
  protected
    procedure RandomFill( var Values : TValueArray );
    procedure Calculate;
    function SumValues( Values : TValueArray ) : Double;
    procedure ShowValues( Values : TValueArray; AListBox : TListBox );
    procedure RefreshView;
  public
    { Public-Deklarationen }
  end;

var
  Main_Form : TMain_Form;

implementation

{$R *.dfm}
{ TMain_Form }

procedure TMain_Form.Calculate;
begin
  FSumA  := SumValues( FValuesA );
  FSumB  := SumValues( FValuesB );
  FResult := FSumB - FSumA;
end;

function TMain_Form.SumValues( Values : TValueArray ) : Double;
var
  LIndex : Integer;
begin
  Result := 0;

  for LIndex := Low( Values ) to High( Values ) do
    begin
      Result := Result + Values[LIndex];
    end;
end;

procedure TMain_Form.RefreshView;
begin
  ShowValues( FValuesA, ValuesA_ListBox );
  ShowValues( FValuesB, ValuesB_ListBox );

  ValueSumA_Label.Caption := FloatToStrF( FSumA, ffNumber, 8, 2 );
  ValueSumB_Label.Caption := FloatToStrF( FSumB, ffNumber, 8, 2 );
  Result_Label.Caption   := FloatToStrF( FResult, ffNumber, 8, 2 );
end;

procedure TMain_Form.ShowValues( Values : TValueArray; AListBox : TListBox );
var
  LIndex : Integer;
begin
  AListBox.Items.BeginUpdate;
  try
    AListBox.Clear;
    for LIndex := Low( Values ) to High( Values ) do
      AListBox.Items.Add( FloatToStrF( Values[LIndex], ffNumber, 8, 2 ) );
  finally
    AListBox.Items.EndUpdate;
  end;
end;

procedure TMain_Form.RandomData_ButtonClick( Sender : TObject );
var
  LCount : Integer;
  LIndex : Integer;
begin
  RandomFill( FValuesA );
  RandomFill( FValuesB );

  Calculate;

  RefreshView;
end;

procedure TMain_Form.RandomFill( var Values : TValueArray );
var
  LCount : Integer;
  LIndex : Integer;
begin
  LCount := Random( 10 ) + 3;
  SetLength( Values, LCount );
  for LIndex := Low( Values ) to High( Values ) do
    begin
      Values[LIndex] := Round( Random * 1000 * 100 ) / 100;
    end;
end;

end.


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