Thema: FreePascal Vergleich von Zahlen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#14

AW: Vergleich von Zahlen

  Alt 4. Mär 2020, 12:18
Zitat:
Delphi-Quellcode:
fs.DecimalSeparator := ',';
fs.ThousandSeparator := ',';

...

fs.DecimalSeparator := '.';
fs.ThousandSeparator := '.';
Beide Zeichen gleich, das kann nicht funktionieren.

Da sich sowas nicht ändert und man das öfters gebraucht...
Delphi-Quellcode:
// global bzw. zentral
var
  FSUS, FSDE: TFormatSettings;

// Init
  {
  FSUS := FormatSettings;
  FSUS.DecimalSeparator := '.';
  FSUS.ThousandSeparator := ',';
  FSDE := FormatSettings;
  FSDE.DecimalSeparator := ',';
  FSDE.ThousandSeparator := '.';
  }

  FSUS := TFormatSettings.Create('en-US'); // oder TFormatSettings.Create($0409);
  FSDE := TFormatSettings.Create('de-DE'); // oder TFormatSettings.Create($0407);
Dann fliegt erstmal die ständige Definition raus
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
var
  x: Double;
begin
  x := NaN;
  if not TryStrToFloat(AString, x, FSUS) then begin
    if not TryStrToFloat(AString, x, FSDE) then
      x := NaN;
  end;
  if IsNaN(x) then
    Result := 0
  else
    Result := x;
end;
und wenn man weiter Unnötiges entfernt, dann bleibt nicht mehr viel übrig
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
begin
  if not TryStrToFloat(AString, Result, FSUS) and not TryStrToFloat(AString, Result, FSDE) then
    Result := 0;
end;
oder
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
begin
  if not TryStrToFloat(AString, Result, FSUS) then
    Result := StrToFloatDef(AString, 0, FSDE);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Mär 2020 um 20:33 Uhr)
  Mit Zitat antworten Zitat