Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Fehler bei Dateneingabe (https://www.delphipraxis.net/157613-fehler-bei-dateneingabe.html)

snboy2010 19. Jan 2011 21:40

AW: Fehler bei Dateneingabe
 
geht nicht. immer der gleiche fehler

Bernerbaer 19. Jan 2011 22:09

AW: Fehler bei Dateneingabe
 
Ich befürchte diese Diskussion führt ins Unendliche. Es gibt einige Grundregeln die man von seinen Usern verlangen darf und dazu gehört, dass der User den Dezimalseparator den er auf seinem System installiert hat kennt.

Fazit:
- Versuche den String wie schon gezeigt umzuwandeln
- wenn es nicht geht, löse einen Fehler aus
- Mach den User darauf aufmerksam, welches gemäss seinen Systemeinstellungen der korrekte Dezimalseparator ist und dass seine Eingabe deshalb falsch ist.

Grund:
Es gibt auch andere Zeichen als , und . die als Dezimalseperator verwendet werden. Jeder Windowsuser kann sich seinen eigenen Separator definieren und dann wird das ganze mit If und ElseIf zu einem unmöglich zu lösenden Problem.

snboy2010 20. Jan 2011 05:29

AW: Fehler bei Dateneingabe
 
Fazit. Nicht nur ich, sondern keiner hier wusste eine richtige Lösung für das Problem. Und nur Tipps oder Ansätze helfen einem Anfänger wie mir nicht wirklich weiter. Aber ist ja auch egal. Trozdem Danke!

rollstuhlfahrer 20. Jan 2011 10:07

AW: Fehler bei Dateneingabe
 
Zitat:

Zitat von snboy2010 (Beitrag 1075977)
Fazit. Nicht nur ich, sondern keiner hier wusste eine richtige Lösung für das Problem. Und nur Tipps oder Ansätze helfen einem Anfänger wie mir nicht wirklich weiter. Aber ist ja auch egal. Trozdem Danke!

Einspruch: Man hat dich mehrfach auf eine Lösungsmöglichkeit hingewiesen. Ein reines "geht nicht" ist keine schöne Fehlerbeschreibung. Da sind selbst die Fehlerangaben seitens Delphi besser (Ja, Delphi beschreibt den gefundenen Fehler, solange er ein Syntax-Fehler ist).
Punkt 2: Hast du zufällig Windows 7 und eine nichtmit Windows 7 kompatible Delphi-Version, die dir somit keine Hilfe anbietet? - Dann schau mal bei http://ref.dp200x.de/ vorbei. Dort kannst du in der universellen Hilfe suchen (Ja, es sind dann auch Sachen dabei, die bei dir nicht funktionieren erden, weil du nicht Delphi XE Architect hast, ist klar).

Zu deinem Problem: Wenn du beide Dezimalzeichen verwenden willst, geht das so erst mal nicht. Zuerst musst du einen Dezimaltrenner definieren, mit dem dein Programm arbeiten soll. Der Einfachheit her nehme ich mal das Komma (","). Wenn du jetzt noch zusätzlich den Punkt (".") unterstützen willst, musst du den Punkt in ein Komma umwandeln. Ansonsten bekommst du aussagekräftige Fehler, die dir sagen, dass eine Zahl mit Punkt keine Flieskommazahl ist. Wie man alle Punkte in Kommas umwandelt hat man dir schon gesagt. Weil ich jetzt zu falu bin, um das wieder rauszusuchen, wo das war sag ich es dir einfach nochmal:
Delphi-Quellcode:
neueZahlString := StringReplace(alteZahlString, '.', ',', []);
. Dann kannst du dich an das Konvertieren machen (jetzt alles):
Delphi-Quellcode:
procedure Button1Click();
var
  FormatSettings: TFormatsettings;
  neueZahlString: String;
  neueZahlDouble: Double;
begin
  neueZahlString := StringReplace(alteZahlString, '.', ',', []);
  FormatSettings.DecimalSeperator = ",";
  FormatSettings.ThousandsSeperator = " ";

  if not TryIntToStr(neueZahlString, neueZahlDouble, FormatSettings) then
  begin
    ShowMessage("Die eingegebene Zahl ist auch mit Punkt keine gültige Dezimalzahl. Bitte erneut versuchen");
    Exit; // Abbrechen
  end;

  ShowMessageFmt("Die eingegebene Zahl ist eine Dezimalzahl und sie lautet: %1.2f", [neueZahlDouble]);
end;
So: Das kannst du leider nicht 100% mit Copy&Paste in dein Programm einbauen. Aber vom Aufbau her stimmt es. Es ist bestimmt noch der ein oder andere Fehler drin, weil ich gerade kein Delphi zur Hand habe, um alle Parameter zu überprüfen. Aber das sollte ja für dich keine größere Schwirigkeit darstellen (Ich hoffe mal, du weißt was und wo die Programmierhilfe ist).

Bernhard

PS: Irgendwo in den Forenregeln steht (du hast sie ja akzeptieren müssen um hier zu posten), dass keine 100% fertigen Quellcodes gepostet werden dürfen, weil sonst die in den Forenregeln verankerte Eigeninitiative nicht gewährleistet ist.

snboy2010 20. Jan 2011 20:18

AW: Fehler bei Dateneingabe
 
So ICH HAB'S!!! Sieht zwar nicht gut aus und man merkt, dass es von einem deutlichen Anfänger gemacht wurde, aber die Lösung erfühlt alle meine Vorraussetzungen. Und ich bin selber darauf gekommen8-)
Code:
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double;
begin
  if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben)
      and TryStrToFloat(Edit4.Text,jahrkm) then
    begin
      aktpreis := StrToFloat(Edit6.Text);
      ver100ben := StrToFloat(Edit3.Text);
      jahrkm := StrToFloat(Edit4.Text);
    end
  else
  decimalseparator := '.';
   if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben)
      and TryStrToFloat(Edit4.Text,jahrkm) then
   begin
      aktpreis := StrToFloat(Edit6.Text);
      ver100ben := StrToFloat(Edit3.Text);
      jahrkm := StrToFloat(Edit4.Text);
    end
  else
    decimalseparator := ',';
   if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben)
      and TryStrToFloat(Edit4.Text,jahrkm) then
      begin
      aktpreis := StrToFloat(Edit6.Text);
      ver100ben := StrToFloat(Edit3.Text);
      jahrkm := StrToFloat(Edit4.Text);
    end
    else
    begin
      ShowMessage('Bitte Zahlen zur Eingabe verwenden!');
    end;

DeddyH 21. Jan 2011 07:07

AW: Fehler bei Dateneingabe
 
Zitat:

Delphi-Quellcode:
if TryStrToFloat(Edit6.Text,aktpreis)

Wenn das klappt, steht in aktpreis bereits der Wert, die spätere Zuweisung
Zitat:

Delphi-Quellcode:
aktpreis := StrToFloat(Edit6.Text);

ist also komplett überflüssig. Das wurde aber auch bereits mehrfach erwähnt.

mkinzler 21. Jan 2011 08:27

AW: Fehler bei Dateneingabe
 
@Detlef: Er scheint unseren Fähigkeiten nicht genügend zu trauen, um uns zu glauben.

DeddyH 21. Jan 2011 08:32

AW: Fehler bei Dateneingabe
 
Der Hilfe scheint er auch nicht zu trauen (sofern er sie denn gelesen hat).

rollstuhlfahrer 21. Jan 2011 14:49

AW: Fehler bei Dateneingabe
 
So, das muss ich jetzt mal loswerden:

Mir ist es ganz egal, wie anfängerhaft du agierst. Aber zuerst uns zurechtweisen wollen und dann nicht auf die nachgereichten Hinweise reagieren wollen, ist nicht nur Dreist sondern auch noch Frech obendrauf.

Zitat:

Zitat von snboy2010 (Beitrag 1076241)
So ICH HAB'S!!! Sieht zwar nicht gut aus und man merkt, dass es von einem deutlichen Anfänger gemacht wurde, aber die Lösung erfühlt alle meine Vorraussetzungen. Und ich bin selber darauf gekommen

Eigenlob stinkt nicht nur, sondern es ist auch an dieser Stelle nicht angebracht. Wenn du mal hochscrollst (über deinen eigenen Beitrag, ja da ist noch was), dann steht da eine Lösung, die besser für dein Problem geeignet ist.

Bernhard

snboy2010 21. Jan 2011 16:11

AW: Fehler bei Dateneingabe
 
Also, hätte ich eure Lösungen verstanden, hätte ich diese auch benutzt. Aber das einzige worauf ich gekommen bin, war meine Lösung.
Das mit dem Überflüssig von
Code:
aktpreis := StrToFloat(Edit6.Text);
keine Ahnung. Als ich es rausgenommen habe, wurde eine Fehlermeldung angezeigt und das Programm lief nicht.

Als Fazit möchte ich sagen: Ertsmal möchte ich mich dafür bedanken, dass Ihr geantwortet habt. Aber man hat doch deutlich gemerckt, dass hier einer Anfragt, der keine von Programmieren hat und es nur für die Schule macht. Die Art und Weise wie hier geantwortet wurde, hat bei mir das Gefühl ausgelöst ausgelacht zu werden und die Tipps, die Ihr mir geschrieben habt habe ich so gut wie nicht verstanden.
Ich z.B. mache es so: Ich habe Ahnung von Autos. Eigentlich viel Ahnung. Wenn im Forum einer eine Frage hat und ich darauf die Antwort kenne, dann Antworte ich ihm mit einer Schritt für Schritt Anleitung und erkläre dabei was das alles bedeutet.
Aber trozdem Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 5 von 6   « Erste     345 6      

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