Tausendertrennpunkt

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Catfish
Beiträge: 7
Registriert: Di 9. Sep 2014, 20:08

Tausendertrennpunkt

Beitrag von Catfish »

Hi an alle,


ich habe vor kurzen angefangen zu Programmieren und mir macht es eigentlich recht viel Spaß nur nun stehe ich vor ein Problem bei dem google anscheinend auch nicht mehr helfen kann.
Und zwar habe ich ein Program geschrieben das nicht viel mehr ist als ein Taschenrechner nur in etwas anderer Form und für meine Bedürfnisse.

Dort sind ein paar Edit Felder wo man in manche Zahlen eingeben muss und wodurch dann später durch ein Button alles in ein Edit ausgerechnet wird.
Die restlichen Editfenster sind nur für die Anzeige der Zwischenergebnisse.

An und für sich funktioniert das Programm sehr gut und macht auch das was es soll. Nun hab ich aber mit bekommen das vieles heutzutage ( wenn man von Internationalen Zahlen ausgeht) mit ein Tausendertrennpunkt versehen ist.

Nun meine Frage: Wie kann ich das hin bekommen das jemand trotzdem im Internet eine Zahl ( z.b. 200.540.864) kopieren kann und im Edit einfügen kann.
Momentan erkennt er durch der TryStrToFloat Funktion das es sicht nicht nur um Zahlen handelt und setzt so wie es sein soll eine 0 ins Edit
Hier mal ein Auszug:

Code: Alles auswählen

begin
 
if not TryStrToFloat(edit1.text,h) then
 begin
  edit1.text:='0';
 end; 
An und für sich ganz richtig. Momentan muss jeder der solch eine Zahl hat sie vorher irgendwo rein schreiben und die Punkte entfernen, oder halt abtippen wodurch aber Fehler entstehen können.

Ich wollte Fragen ob es irgendwie eine Funktion gibt die die Einkopierte "Zahl" speichert die Punkte entfernt und sie dann wieder im selben Edit ausgibt und keine 0 rein schreibt.


Liebe Grüße

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Tausendertrennpunkt

Beitrag von Michl »

Naja, Google würde schon helfen. Eine Möglichkeit wäre aber z.B. so:

Code: Alles auswählen

procedure TForm1.Edit1EditingDone(Sender: TObject);
var
  i: Integer;
begin
  ThousandSeparator:='.';
  Edit1.Text:=StringReplace(Edit1.Text, ThousandSeparator, '', [rfReplaceAll]);
 
  if not TryStrToInt(Edit1.Text, i) then begin
    Edit1.Text:='0';
    ShowMessage('Bitte eine Ganzzahl eingegeben!');
  end;
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Tausendertrennpunkt

Beitrag von m.fuchs »

Ein kleiner Gedanke dazu noch: Du schreibst von "internationalen Zahlen" und benutzt Gleitkommazahlen. Dabei kannst du dir natürlich noch Probleme einfangen, wenn der Punkt als Dezimaltrenner benutzt wird. Dies nur als Hinweis, wie du damit umgehst hängt vom Programm und seinen Nutzern ab.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Catfish
Beiträge: 7
Registriert: Di 9. Sep 2014, 20:08

Re: Tausendertrennpunkt

Beitrag von Catfish »

Danke für die schnelle Hilfe. Funktioniert sehr gut. Habe diese Funktion auch bei Google gefunden gehabt nur leider konnte ich damit nicht viel anfangen. Aber so funktioniert es sehr gut. Danke vielmals


Und fuchs das ist ein sehr guter Einwand. Darüber werde ich mal nach denken und vielleicht was finden wie ich das auch noch verhindern kann.


Liebe Grüße

Mathias
Beiträge: 6912
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tausendertrennpunkt

Beitrag von Mathias »

Der Dezimalpunkt hatte mich auch mal fast zur Weissglut gebracht.
Das schlimme dabei ist, ich wusste nicht mal, das in der EU das ',' als Seperator verwendet wurde, ich bin immer von einem '.' ausgegangen.
Jeder Taschenrechner hat ein '.' auf der Tastatur.


Diese beiden Konstanten würde ich genau anschauen.

DecimalSeparator, ThousandSeparator

Die grösste Hürde, das der '.' einmal als Tausendertrenner gebraucht wird und einmal als Dezimalpunkt. Ein universelle Konventierer ist somit recht kompliziert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Catfish
Beiträge: 7
Registriert: Di 9. Sep 2014, 20:08

Re: Tausendertrennpunkt

Beitrag von Catfish »

Hallo

habe das ganze problem jetzt mit Format unterbunden also habe jetzt auch alles ausprobiert und funktioniert einwandfrei, danke euch dafür.

Nun habe ich mal eine Frage, ich habe mir das Forum durch gelesen und finde das etwas kompliziert für ein neuling. Und zwar geht es darum ich habe mir das neuste Lazarus ja geladen auf der Homepage und das ist 64bit system geladen. Nun kam einer bei mir an und meinte er hat ein 32 bit Windows und kann das nicht öffnen. Meine Frage dazu, ist das wirklich so kompliziert mit dem umstellen oder geht das auch einfacher wie im wiki für Linux beschrieben steht? Nur wo muss ich den Code dann einfügen?

danke für eure Geduld :)

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Tausendertrennpunkt

Beitrag von Komoluna »

am einfachsten ist es, wenn du dir 32bit Lazarus runterlädst und entweder parallel zu oder anstatt 64bit Laz installierst...
Für 90% aller Anwendungen reicht es, für 32bit zu Kompilieren.

Dank der Abwärtskompatiblität, kann man ja auf 64bit OS auch 32bit Anwendungen ausführen.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Catfish
Beiträge: 7
Registriert: Di 9. Sep 2014, 20:08

Re: Tausendertrennpunkt

Beitrag von Catfish »

also kann ich das mit meiner version nicht so einfach umstellen?

habe es schon in den einstellungen probiert aber leider nicht funktioniert, kam dann immer das der compiler nicht für 32 bit ausgelegt ist.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Tausendertrennpunkt

Beitrag von Komoluna »

Komoluna hat geschrieben:am einfachsten ist es, wenn du dir 32bit Lazarus runterlädst und entweder parallel zu oder anstatt 64bit Laz installierst...
Installier dir ein 32bit Lazarus. Dann Öffne und kompilier dein Projekt damit. Da ist dann auch ein 32bit Compiler dabei und eingestellt.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten