Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi (N)umerisches Feld akzeptiert keinen Punkt (https://www.delphipraxis.net/70023-n-umerisches-feld-akzeptiert-keinen-punkt.html)

LOMBI 23. Mai 2006 17:23

Datenbank: Paradox • Version: 7 • Zugriff über: Query, DataSource

(N)umerisches Feld akzeptiert keinen Punkt
 
Guten Abend,

sobald ich in ein Edit vom Typ (n)umerisch einen Betrag mit Punkt schreibe,
erhalte ich die Fehlermeldung "kein gültiger Fließkommawert". Was muß ich
bitte tun, damit statt eines ',' ein '.' akzeptiert wird?

Vielen Dank!

Lombi

mkinzler 23. Mai 2006 17:53

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Delphi-Quellcode:
DecimalSeparator _= '.';

WePo 23. Mai 2006 21:40

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
und wieder umstellen nicht vergessen?

marabu 24. Mai 2006 06:28

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Guten Morgen.

Wir sollten immer daran denken, dass die von der Unit SysUtils importierten Systemeinstellungen (DecimalSeparator, ThousandsSeparator) das Format der interaktiven Eingaben (TEdit) diktieren. Ist nicht schön, wenn eine Anwendung von vielen, die eventuell sogar gleichzeitig geöffnet sind, sich nicht an die Systemvorgaben hält.

Ein Sonderfall ist die nicht interaktive Übernahme von Display-Daten z.B. aus Dateien. Hier würde ich (D3) die Zeichenketten vorbehandeln und dann der normalen Verarbeitung zuführen:

Delphi-Quellcode:
function Translate(const s, sOld, sNew: String): String;
var
  i, iPos, iLen: integer;
begin
  SetLength(Result, Length(s));
  iLen := 0;
  for i := 1 to Length(s) do
  begin
    iPos := Pos(s[i], sOld);
    if iPos > Length(sNew) then
      Continue;
    Inc(iLen);
    if iPos > 0
      then Result[iLen] := sNew[iPos]
      else Result[iLen] := s[i];
  end;
  SetLength(Result, iLen);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  e: Extended;
begin
  e := StrToFloat(Translate('123,456.78', '.,', ',.'));
end;
In D7 ist das nicht nötig. Dort stehen GetLocaleFormatSettings() und die überladenen Konvertierungsfunktionen zur Verfügung.

Grüße vom marabu

Edit: Fehler in Translate() korrigiert...

LOMBI 24. Mai 2006 10:08

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  e: Extended;
begin
  e := StrToFloat(Translate('123,456.78', '.,', ',.'));
end;
Fehlermeldung: ''123,456.78 ist kein gültiger Fließkommawert'.
Diese Meldung erhalte ich auch mit ','.

Viele Grüße
Lombi

marabu 24. Mai 2006 10:22

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Klar - weil die Tausenderpunkte bei der Konvertierung nicht mehr drin sein dürfen. Probier mal so:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  e: Extended;
begin
  e := StrToFloat(Translate('123,456.78', '.,', DecimalSeparator));
end;
marabu

LOMBI 24. Mai 2006 11:01

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Ne, klappt leider nicht.

Ratte 24. Mai 2006 11:26

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
dann entfern doch die Tausenderpunkte mit Pos() und delete() vorher.
mfg,
Ratte

marabu 24. Mai 2006 12:07

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Hallo Lombi,

da war ein Fehler in meiner Funktion. Ich habe ihn korrigiert und du müsstest dir den Code nochmal kopieren.

Sorry

marabu

LOMBI 25. Mai 2006 17:16

Re: (N)umerisches Feld akzeptiert keinen Punkt
 
Hi marabu,

danke für die Nachricht. Es gibt nur noch ein Problem und zwar mit der
Berechnung der MwSt. Bei einer Dezimalzahl mit Punkt bleibt das Edit VKbrutto leer.

Viele Grüße
Lombi


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz