Tausendertrennzeichen
Tausendertrennzeichen
Hallo,
gibt es eine Funktion, mit der ich das Tausendertrennzeichen entfernen kann, unabhängig davon, ob es nun ein Punkt oder ein Komma ist?
Ich möchte also sowohl aus 1.250,00, wie auch aus 1,250.00 das Ergebnis 1250,00 erhalten.
Vielen Dank im Voraus
gibt es eine Funktion, mit der ich das Tausendertrennzeichen entfernen kann, unabhängig davon, ob es nun ein Punkt oder ein Komma ist?
Ich möchte also sowohl aus 1.250,00, wie auch aus 1,250.00 das Ergebnis 1250,00 erhalten.
Vielen Dank im Voraus
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Tausendertrennzeichen
Sowas ?
Verwendung in etwa so
Code: Alles auswählen
function StrFormat2StrFormat(SourceStr: string; SourceFormat: TFormatSettings;
out DestStr: string; DestFormat: TFormatSettings):boolean;
var
Temp: Extended;
begin
if SourceStr = '' then
begin
Result:= false;
exit;
end;
try
TryStrToFloat(SourceStr, Temp, SourceFormat);
DestStr:=FloatToStr(Temp,DestFormat);
except
Result:=false;
end;
end;
Code: Alles auswählen
var
SourceFSettings,DestFSettings: TFormatSettings;
begin
{some code}
SourceFSettings:=FormatSettings;
SourceFSettings.DecimalSeparator:=',';
SourceFSettings.ThousandSeparator:='.';
DestFSettings:=FormatSettings;
DestFSettings.DecimalSeparator:='.';
DestFSettings.ThousandSeparator:=' ';
{some code}
StrFormat2StrFormat(strInput,SourceFSettings,strTemp,DestFSettings);
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Tausendertrennzeichen
Vielen Dank für den Code,
aber leider ist das wohl etwas zu hoch für mich.
Angenommen, ich habe ein Edit, einen Button und ein Label. Wie muss ich denn dann die Prozedur schreiben, damit im Label der Text aus dem Edit ohne die Tausendertrennzeichen ausgegeben wird?
aber leider ist das wohl etwas zu hoch für mich.
Angenommen, ich habe ein Edit, einen Button und ein Label. Wie muss ich denn dann die Prozedur schreiben, damit im Label der Text aus dem Edit ohne die Tausendertrennzeichen ausgegeben wird?
Re: Tausendertrennzeichen
Normalerweise kann man sich je nach Einstellung vom System das Tausendertrennzeichen angeben lassen. Das funktioniert über DefaultFormatSettings. Je nach Einstellung wird für DefaultFormatSettings.ThousandSeparator ein ',' oder '.' zurückgeliefert.
Eine Lösung ja nach Land bzw. System könnte so aussehen:
Willst du wirklich beide Systeme zur gleichen Zeit auf einem Rechner unterstützen, musst du etwas basteln, wobei du bei 1.234 eine Entscheidung treffen musst, ob es dann 1.234 oder 1,234 ist. Ein Fehlerrisiko würde somit immer bleiben. Ich persönlich würde da auf die DefaultFormatSettings setzen und notfalls einen Hinweis ausgeben.
Eine Lösung ja nach Land bzw. System könnte so aussehen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
begin
s := '1.234.567,89';
// s := '1,234,567.89';
Edit1.Text := StringReplace(s, DefaultFormatSettings.ThousandSeparator , '', [rfReplaceAll]);
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Tausendertrennzeichen
Für mich auch. Beim Erstellen eines Testprojektes für dich, bin ich auf interessante Probleme gestoßen.Andromeda hat geschrieben:aber leider ist das wohl etwas zu hoch für mich.
Zitat:
Code: Alles auswählen
//ThousandSeparator not allowed as by Delphi specs
Deshalb wirft die oben gezeigte Funktion einen Fehler beim Aufruf von TryStrToFloat(SourceStr, Temp, SourceFormat); eine Exception.
Ich sehe momentan somit auch keine Lösung, ich weiß aber, das in meiner eigenen Bibliothek ein Problem schlummert

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Tausendertrennzeichen
Du musst die Tausender rausschmeißen. Das hat man wohl von Delphi übernommen?! Zitat: Thousand separators and currency symbols are not allowed in the string.af0815 hat geschrieben:Deshalb wirft die oben gezeigte Funktion einen Fehler beim Aufruf von TryStrToFloat(SourceStr, Temp, SourceFormat); eine Exception.
Ich sehe momentan somit auch keine Lösung, ich weiß aber, das in meiner eigenen Bibliothek ein Problem schlummert
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Tausendertrennzeichen
Vielen Dank an Alle,
ich habe das Problem jetzt so gelöst, dass ich das drittletzte Zeichen abfrage. Wenn das ein Komma ist, werden alle Punkte entfernt, und wenn das ein Punkt ist, werden die Kommas entfernt und der Punkt in ein Komma umgewandelt.
Das ist vielleicht etwas umständlich, aber mit meinen Kenntnissen bekomme ich es nicht besser hin. Die Zeit spielt ja bei Tastaturabfragen sowieso keine Rolle. Auf jeden Fall funktioniert es jetzt einwandfrei.
ich habe das Problem jetzt so gelöst, dass ich das drittletzte Zeichen abfrage. Wenn das ein Komma ist, werden alle Punkte entfernt, und wenn das ein Punkt ist, werden die Kommas entfernt und der Punkt in ein Komma umgewandelt.
Das ist vielleicht etwas umständlich, aber mit meinen Kenntnissen bekomme ich es nicht besser hin. Die Zeit spielt ja bei Tastaturabfragen sowieso keine Rolle. Auf jeden Fall funktioniert es jetzt einwandfrei.