![]() |
StrToFloat klappt nur mit ','
Hallo zusammen,
wenn ich einen String in einen Double Wert konvertieren will, klappt das nur wenn der Fließkommawert als Trennzeichen ein Komma enthält. Ich habe aber ausschließlich Zahlen, die punktweise (getrennt) werden. Die stehen in einem TStringGrid und es muss auf Benutzerfehleingaben abgefangen werden. Deshalb prüfe ich mit try and catch ob sich der String in einen float Wert überführen kann. Das klappt aber nicht bei z.b. 1.2 sondern nur bei 1,2... Hilfe... |
Re: StrToFloat klappt nur mit ','
Um mal ne schlampige Verainte zu nenneb (gibt bestimmt ne effizientere :mrgreen: ):
ersetzt doch einfach alle Punkte durch Kommata und mach dann strtofloat :mrgreen: |
Re: StrToFloat klappt nur mit ','
Oder Setzte die Konstanten DecimalSeparator/ThousandSeparator temporar oder verwende, so vorhanden die überladene Version mit übergabe des Formats.
|
Re: StrToFloat klappt nur mit ','
Siehst du das meinte ich mit effizienterer Variante, die ich halt gerade nicht im Kopf hatte :mrgreen:
|
Re: StrToFloat klappt nur mit ','
Zitat:
das wäre die sauberste Lösung. Beim Überschreiben des Wertes in der globalen Variable bekommst Du immer dann ein Problem, wenn jmd. anderes den selben Gedanken hatte (und erfahrungsgemäß passiert sowas früher oder später mal). Deshalb einfach eine lokale FormatSettings Variable nehmen und die Eigenschaft ändern:
Delphi-Quellcode:
Dabei wird hier einfach die lokale Einstellung des Benutzers verwendet, der Dezimalseperator durch einen Punkt ersetzt und dann eben die überladene StrToFloat-Funktion aufgerufen. Analog sieht es aus, wenn Du ein Float in einen String konvertieren willst, wobei dann im String das entsprechende Dezimaltrennzeichen verwendet wird.
var formatSettings: TFormatSettings;
begin GetLocaleFormatSettings(GetUserDefaultLCID, formatSettings); formatSettings.DecimalSeparator := '.'; f := StrToFloat(s, formatSettings); end; Gruß Der Unwissende |
Re: StrToFloat klappt nur mit ','
Zitat:
|
Re: StrToFloat klappt nur mit ','
super...
hat funktioniert. |
Re: StrToFloat klappt nur mit ','
Zitat:
Delphi-Quellcode:
Voraussetzung für diese Methode: es gibt keine Tausender-Trennzeichen.
function MyStrToFloat(AString: string): double;
begin AString := StringReplace(AString, '.', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]); AString := StringReplace(AString, ',', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]); result := StrToFloat(AString); end; |
Re: StrToFloat klappt nur mit ','
Hallo,
falls es doch einen Tausender-Trennpunkt gibt, einfach alle komma´s und Punkte raus, dann "StrToFloat" und anschließend nochmal durch 100 teilen. Da kommt man auch aufs richtige Ergebnis, unabhängig von Tausenderpunk mfg Tommy82 |
Re: StrToFloat klappt nur mit ','
Zitat:
|
Re: StrToFloat klappt nur mit ','
Naja, und falls nicht, dann sorgt man halt dafür, dass man 2 Kommastellen hat. Sowas sollte doch mit ROUND() kein problem sein oder ?
mfg Tommy82 |
Re: StrToFloat klappt nur mit ','
Zitat:
Überleg doch mal wovon wir und du rede(n/st)! Wir haben einen String mit x Nachkommastellen und den willst du umwandeln. Punkte und Komma im String ersetzen mit was anderen ist ja ok, aber dann bekommt es StrToFloat(). Wo willst du dann noch runden, wo du doch schon die Nachkommastellen im String zerstört hast? |
Re: StrToFloat klappt nur mit ','
Zitat:
Wenn ich das so einfach mit meinen Prozessdaten machen würde :shock: uiuiui ^^ |
Re: StrToFloat klappt nur mit ','
Hallo,
ich werfen einfach mal die Procedure VAL(); in die Diskussion. Damit ist es auch möglich einen String in eine Zahl zu konvertieren. z.B.: [code=delphi]Val(Wert, Zahl, Code); If Code= 0 then begin //Zahl hat das Komma als Punkt; end else if Wert[Code]= ',' then // Wenn doch ein Komma dann in einem Punkt umwandeln begin Wert
Code:
Damit ist es nun egal, ob Punkt oder Komma.
:= '.';
Val(StWert, Zahl, Code); // Prüfen ob es sich jetzt um eine Zahl handelt end; Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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 by Thomas Breitkreuz