Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konvertierungsproblem zwischen string und integer (https://www.delphipraxis.net/31518-konvertierungsproblem-zwischen-string-und-integer.html)

torud 10. Okt 2004 18:10


Konvertierungsproblem zwischen string und integer
 
Hallo Leute!

ich mache da irgendwo irgendwie einen mehr als dämlichen Fehler, finde ihn aber nicht...
Ich setze nach einer Combobox-Bedienung in einem anderen Edit einen Preis ein. Dies geschieht hier:

Delphi-Quellcode:
procedure TForm1.cmb_geb_nr1Change(Sender: TObject);
begin
    if cmb_geb_nr1.Text='1'   then ed_geb_nr1.Text:='4,40';
    if cmb_geb_nr1.Text='1200' then ed_geb_nr1.Text:='3,60';
    if cmb_geb_nr1.Text='1216' then ed_geb_nr1.Text:='5,55';
    if cmb_geb_nr1.Text='1229' then ed_geb_nr1.Text:='11,11';
    if cmb_geb_nr1.Text='Dokumentation' then ed_geb_nr1.Text:='6,15';
    if cmb_geb_nr1.Text=''    then ed_geb_nr1.Text:='';
    //ShowMessage('nach dem zuweisen');
end;
In dem Edit löse ich im OnChange-Ereignis eine Berechnung aus. Natürlich ist das doof, dass ich dafür immer alles noch von string nach integer konvertieren muss, aber ich weiss nichts besseres. Jedenfalls hier die Routine, die dann den EditInhalt und den von 10 weiteren nimmt und alles zusammenrechnen soll. Hier schmiert aber die Routine ab. Die Messagebox bekomme ich noch und dann die Meldung, dass 4,40 kein Integerwert ist.

Delphi-Quellcode:
procedure TForm1.ed_geb_nr1Change(Sender: TObject);
var
  a,b,c,d,e,f,g,h,i,j:integer;
begin
    ShowMessage('vorm rechnen');
   if ed_geb_nr1.text >'' then a:=StrToInt(ed_geb_nr1.text) else a:=0;
   if ed_geb_nr2.text >'' then b:=strtoint(ed_geb_nr2.text) else b:=0;
   if ed_geb_nr3.text >'' then c:=strtoint(ed_geb_nr3.text) else c:=0;
   if ed_geb_nr4.text >'' then d:=strtoint(ed_geb_nr4.text) else d:=0;
   if ed_geb_nr5.text >'' then e:=strtoint(ed_geb_nr5.text) else e:=0;
   if ed_geb_nr6.text >'' then f:=strtoint(ed_geb_nr6.text) else f:=0;
   if ed_geb_nr7.text >'' then g:=strtoint(ed_geb_nr7.text) else g:=0;
   if ed_geb_nr8.text >'' then h:=strtoint(ed_geb_nr8.text) else h:=0;
   if ed_geb_nr9.text >'' then i:=strtoint(ed_geb_nr9.text) else i:=0;
   if ed_geb_nr10.text >'' then j:=strtoint(ed_geb_nr10.text) else j:=0;
   ed_ges1.Text:=inttostr(a+b+c+d+e+f+g+h+i+j);
end;

Wer weiss Rat oder hat eine bessere Idee???

Ratte 10. Okt 2004 18:14

Re: Konvertierungsproblem zwischen string und integer
 
Hi,

wie wars mit real anstatt integer? Integer kann nur ganze Zahlen und 4,40 ist nunmal keine ganze Zahl. Du musst zum Umrechnen dann floattostr() benutzen.

Ratte

mirage228 10. Okt 2004 18:14

Re: Konvertierungsproblem zwischen string und integer
 
Hi,

4,40 ist kein Integer, sondern höchstens ein Fließkommawert (Delphi-Referenz durchsuchenExtended).
Jedoch ist der Dezimalseperator kein Komma, sondern ein Punkt. Wenn Du einen Punkt benutzt (bzw. den Dezimalseperator änderst), kannst Du Delphi-Referenz durchsuchenFloatToStr und Delphi-Referenz durchsuchenStrToFloat benutzen.
Falls Du für die Weiterverarbeitung Integers benötigst, schau dir mal Delphi-Referenz durchsuchenRound und Delphi-Referenz durchsuchenStrToIntDef (ab Delphi 7) an.

Außerdem, musst Du schreiben:
Delphi-Quellcode:
if ed_geb_nr1.text <> ''
Mit <> prüfst Du, ob dein Text im Edit ungleich "leer" ist.


mfG
mirage228

torud 10. Okt 2004 18:15

Re: Konvertierungsproblem zwischen string und integer
 
danke euch!!!
da kommt doch glatt wieder mein gefährliches halbwissen zum vorschein!!!

Ultimator 10. Okt 2004 18:16

Re: Konvertierungsproblem zwischen string und integer
 
ARGH! Aus! Stop! Mach Sitz! :mrgreen:

Nehmt doch bitte kein real. Real ist nur noch aus Kompatibiliätsgründen vorhanden. Nehmt besser single, double oder extended, die liegen dem Prozessor viel mehr und werden schneller verarbeitet ;-)

mirage228 10. Okt 2004 18:19

Re: Konvertierungsproblem zwischen string und integer
 
Zitat:

Zitat von Ultimator
ARGH! Aus! Stop! Mach Sitz! :mrgreen:

Nehmt doch bitte kein real. Real ist nur noch aus Kompatibiliätsgründen vorhanden. Nehmt besser single, double oder extended, die liegen dem Prozessor viel mehr und werden schneller verarbeitet ;-)

Ja, da hast Du im Prinzip recht.

Jedoch ist der Flag [oh]$REALCOMPATIBILITY[/oh], standardmäßig "off".

Das heisst:
Zitat:

Zitat von OH
Mit der Standardeinstellung {$REALCOMPATIBILITY OFF} entspricht der generische Typ Real dem Typ Double.

Deine Aussagen treffen jedoch auf Delphi-Referenz durchsuchenReal48 zu.

mfG
mirage228

torud 10. Okt 2004 18:26

Re: Konvertierungsproblem zwischen string und integer
 
kann einer von euch die vorher gemachten aussagen nochmal für mich kurz ummüntzen???

torud 10. Okt 2004 18:29

Re: Konvertierungsproblem zwischen string und integer
 
achso und bevor ich es vergesse.

1. es läuft jetzt
2. das ergebnis benötige ich aber in dieser formtaierung
4,40
und NICHT
4,4

was muss ich tun??

mirage228 10. Okt 2004 18:36

Re: Konvertierungsproblem zwischen string und integer
 
Zitat:

Zitat von torud
achso und bevor ich es vergesse.

1. es läuft jetzt
2. das ergebnis benötige ich aber in dieser formtaierung
4,40
und NICHT
4,4

was muss ich tun??

Hi,

dafür gibt es Delphi-Referenz durchsuchenFloatToStrF

Delphi-Quellcode:
var
  S: String;
  F: Extended;
begin
  F := 4.4;
  S := FloatToStrF(F, ffFixed, 15, 2);
  ShowMessage(S);
end;
Wichtig ist der Parameter "Precision", der die Anzahl der Nachkommastellen festlegt, sowie das Format. Hier ist es ffFixed, weil eine feste Anzahl an Nachkommastellen gebraucht wird.
Das Beispiel gibt "4,40" aus.

mfG
mirage228

r_kerber 10. Okt 2004 18:36

Re: Konvertierungsproblem zwischen string und integer
 
Zitat:

Zitat von torud
2. das ergebnis benötige ich aber in dieser formtaierung
4,40
und NICHT
4,4

was muss ich tun??

Dir mal die Funktion Delphi-Referenz durchsuchenFormat anschauen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Seite 1 von 2  1 2      

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