Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Umwandlung String in Double (https://www.delphipraxis.net/34838-umwandlung-string-double.html)

allarich 29. Nov 2004 08:46


Umwandlung String in Double
 
Hallo !
Ich hab ein Problem,daß ich möglichst schnell lösen möchte.
Ich muß eine Spalte einer Tabelle aufsummieren, deren Werte in Stringform vorliegen.
Ich möchte nin die Strings in Realgrößen (Double) umwandeln und aufsummieren.Will bei mir nicht funktionieren. Wie kann ich das möglichst einfach realisieren ?

MfG
allarich

mirage228 29. Nov 2004 08:47

Re: Umwandlung String in Double
 
Hi,

schau mal Delphi-Referenz durchsuchenStrToFloat ;)

mfG
mirage228

Jasocul 29. Nov 2004 08:47

Re: Umwandlung String in Double
 
Die Funktion StrToFloat sollte da helfen.

allarich 29. Nov 2004 09:55

Re: Umwandlung String in Double
 
Hallo Freunde,

habe ich schon probiert.Hat aber nicht geklappt. Vielleicht ein Fehler von mir ?
Habe folgende source verwendet:
Delphi-Quellcode:
var
  i: Integer;
  Z1: string;
  Ergebnis: Double;

begin
  Ergebnis:= 0;
  i:= 0;
  REPEAT
    i:= i + 1;
    Z1:= ws.Cells.Item[i];
    Ergebnis:=Ergebnis + StrToFloat(Z1);
    end;
  UNTIL Z1 = ''
end;
Wer sieht hier wo einen Fehler ?

MfG
allarich

[edit=Sharky]Delphi-Tags gesetzt und den Code etwas formatiert ;-) Mfg, Sharky[/edit]

Sanchez 29. Nov 2004 10:04

Re: Umwandlung String in Double
 
Hallo,

Du hast da ein end zuviel. So wird es gar nicht kompilieren.
Außerdem solltest du vor dem StrToFloat sicherstellen, das Z1 kein Leerstring ist, oder am Besten gleich Delphi-Referenz durchsuchenTryStrToFloat benutzen um sicherzugehen, dass in Z1 ein gültiger String steht.



Delphi-Quellcode:
var
  i: Integer;
  Z1: string;
  Ergebnis: Double;

begin
  Ergebnis:= 0;
  i:= 0;
  REPEAT
    i:= i + 1;
    Z1:= ws.Cells.Item[i];
    Ergebnis:=Ergebnis + StrToFloat(Z1);
    end; <--- das ist zuviel
  UNTIL Z1 = ''
end;
grüße, daniel

allarich 29. Nov 2004 10:55

Re: Umwandlung String in Double
 
Hallo Sanchez,
Du hast natürlich recht. Ich habe das begin nach REPEAT vergessen !
Habe aber noch ne andere Frage,vielleicht kannst Du mir hier auch helfen.
Wie frage ich programmtechnisch ab, ob ein Workbook schon geöffnet ist ?

MfG
allarich

Sanchez 29. Nov 2004 10:57

Re: Umwandlung String in Double
 
Ich fürchte, da kann ich dir nicht helfen. Ich hab nämlich keine Ahnung, was ein Workbook ist.

jim_raynor 29. Nov 2004 12:06

Re: Umwandlung String in Double
 
Denk daran, dass Delphi ein . als Dezimaltrenner erwartet. Ein Komma wird nicht akzeptiert. Generell darf bei StrToFloat der String nicht Formatiert sein (also zum Beispiel keine führenden Leerzeichen oder Tausendertrennzeichen).

Sanchez 29. Nov 2004 12:13

Re: Umwandlung String in Double
 
Zitat:

Zitat von jim_raynor
Denk daran, dass Delphi ein . als Dezimaltrenner erwartet. Ein Komma wird nicht akzeptiert.

Meine OH sagt dazu was anderes:
Zitat:

Die globale Variable DecimalSeparator definiert das Zeichen, das als Dezimaltrennzeichen verwendet werden muß. Tausendertrennzeichen und Währungssymbole sind nicht zulässig. Enthält S keinen gültigen Wert, wird eine EConvertError-Exception ausgelöst.
Ich hab nämlich vorher beim Probieren ne Exception bekommen, wie ich . verwendet hab.

Luckie 29. Nov 2004 13:28

Re: Umwandlung String in Double
 
Zitat:

Zitat von allarich
Wie frage ich programmtechnisch ab, ob ein Workbook schon geöffnet ist ?

Öffne bitte für eine neue Frage einen neuen Thread. Danke.

allarich 29. Nov 2004 14:20

Re: Umwandlung String in Double
 
Hallo Luckie,
schon längst erfolgt !

Gruß
allarich

fkerber 29. Nov 2004 14:23

Re: Umwandlung String in Double
 
Hi!

Mal so als Frage zu begin -- end:

Ist es nicht so, dass es bei repeat-Schleifen gar nicht stehen muss?


Ciao Frederic

Ultimator 29. Nov 2004 14:24

Re: Umwandlung String in Double
 
Ja, das stimmt.
Das Ende der Repeat-Schleife wird ja durch das until... gekennzeichnet.

dizzy 29. Nov 2004 14:30

Re: Umwandlung String in Double
 
Zu . und , :

In der IDE wird für konstante Zahlenwerte nur der . akzeptiert. Für die Umwandlungsfunktionen ist die Einstellung des DecimalSeparators maßgebend! Das sind 2 unterschiedliche Dinge, die so erstmal nichts miteinander zu tun haben.
(Der DecimalSeparator ist auf deutschen Systemen defaultmäßig idR ',')

Gruss,
Fabian

Jasocul 29. Nov 2004 14:35

Re: Umwandlung String in Double
 
Ansonsten gäbe es auch große Probleme bei der Übergabe von zwei Zahlen als Parameter einer Funktion. Die werden nämlich mit Komma getrennt. Da würder Compiler doch erhebliche Probleme bekommen.

Beispiel:
Berechne (5,34, 78,44);
Woher sollte der Compiler wissen welches die erste Zahl und welches die zweite ist. Daher:
Berechne (5.34, 78.44);
So ist wieder alles hübsch einfach.


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