Delphi-PRAXiS

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!

yankee 10. Okt 2004 18:40

Re: Konvertierungsproblem zwischen string und integer
 
kleiner Tipp:
JVCL-Komponeneten benutzen. Es gibt dort unter der Registerkarte "Jv Convert" 6 editfelder: Eins für nur integer, eins für nur float, eins für nur Jahreszahlen,... Sehr parktisch. Da kannst du dir die Konvertierung sparen. Mal abgesehen davon, dass man so in editfeld nur Zahlen eintragen kann usw.

torud 11. Okt 2004 05:39

Re: Konvertierungsproblem zwischen string und integer
 
hm, danke, aber das komische daran ist das komische darin.
ich habe die jvcl-komponenten installiert. komischerweise teilt mir aber mein delphi mit, dass ihm die JvFloatEdit.dcu und weitere dcu´s fehlen. ich habe mal die suche auf meinem pc bedient und habe diese dcu´s auch nicht finden können. somit funzt dieser vorschlag leider nicht! warum nur???

yankee 11. Okt 2004 06:01

Re: Konvertierungsproblem zwischen string und integer
 
hast du die komponenten denn mit dem Jedi Installer installiert?

torud 11. Okt 2004 08:35

Re: Konvertierungsproblem zwischen string und integer
 
na klar.
wüsste doch gar nicht, wie es anders gehen sollte!??

yankee 11. Okt 2004 10:09

Re: Konvertierungsproblem zwischen string und integer
 
welche Delphiversion hast du?

torud 11. Okt 2004 11:25

Re: Konvertierungsproblem zwischen string und integer
 
6 pro


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