![]() |
StringReplace
Hi,
mein Delphi benutzt in Decimalzahlen Komma. Ich habe eine Funktion, in der die Eingaben auf ihrer Gültigkeit überprüft werden, wobei aber auch Punkte in Decimalzahlen zugelassen werden sollen:
Delphi-Quellcode:
Wenn aber s z.B. '0.5' ist, dann liefert StrToFloat(s) einen Fehler, obwohl StringReplace eigentlich den Punkt in einen Komma hätte verwandeln sollen. :wall:
function ValidateNumber(s: String): Boolean;
var i: Integer; t: Real; begin Result := True; for i := 1 to Length(s) do if s[i] in ['-', '0'..'9', '.', ','] = False then Result := False; StringReplace(s, '.', ',', [rfReplaceAll]); try t := StrToFloat(s); except Result := False; end; end; Mit einem Schritt-für-Schritt durchlauf der Funktion habe ich bemerkt, dass nach StringReplace s immer noch Punkte enthält! Was ist schief gegangen? :gruebel: |
Re: StringReplace
Schau dir mal die Konstanten DecimalSeparator und ThousandSeparator oder die uberladenen Versionen der Konvertierungsrotinen mit Foramtangabe an.
|
Re: StringReplace
@mkinzler: Das weiß ich, aber mich wundert trotzdem, warum der StringReplace nicht funzt! :gruebel:
|
Re: StringReplace
Wenn du das weist, warum dann der Umstand?
Was bezweckst du mit der Schleife? Dein Aufruf von StringReplace änder ja nichts, da du den Rückgabewert verwirfst:
Delphi-Quellcode:
s := StringReplace(s, '.', ',', [rfReplaceAll]);
|
Re: StringReplace
:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
Ich kann es nicht glauben, dass ich das vergessen habe! Und dann auch mehrmals übersehen! (Na ja, kann schon mal passieren.... :roll: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 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