Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Problem mit d := System.Double.Parse(TextBox1.Text); (https://www.delphipraxis.net/65729-problem-mit-d-%3D-system-double-parse-textbox1-text-%3B.html)

gfjs 20. Mär 2006 17:06


Problem mit d := System.Double.Parse(TextBox1.Text);
 
Hallo, Allerseits.

Delphi-Quellcode:
try
  d := System.Double.Parse(TextBox1.Text);
  Label1.Text := d.ToString;
except
  MessageBox.Show('Sie können hier nur eine Zahl eingeben!');
  TextBox1.Clear;
  self.ActiveControl := TextBox1;
end;
Zu diesem Quelltext habe ich folgende Frage:

Wenn ich eine Zahl mit einem Komma eingebe (z.B. 1,25) funktioniert alles perfekt.
Wenn ich eine Zahl mit einem Dezimalpunkt eingebe, steht in Label1 "125", also nur die Ziffern ohne Dezimalpunkt und es kommt auch keine Fehlermeldung.
Sonstige Falscheingaben (Buchstaben, zwei Kommas, etc.) funktionieren auch.

Warum wird bei der Eingabe eines Dezimalpunkts im Label der Dezimalpunkt nicht angezeigt und auch keine Fehlermeldung erzeugt?

Ich bin für jede Hilfestellung dankbar.

mfg gfjs

Khabarakh 20. Mär 2006 17:21

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
Jaja, die allseits beliebte Hilfe...
Zitat:

integral-digits
A series of digits specifying the integral part of the number. Runs of integral-digits can be partitioned by a group-separator symbol. (For example, in some cultures a comma (,) separates groups of thousands.) Integral-digits can be absent if there are fractional-digits.

'.'
A culture-specific decimal point symbol.
Der Punkt wird also als Tausender-Trennzeichen erkannt, wobei 1.25 einfach als 125 gesehen wird.
Aber mehrere Kommata oder Buchstaben (außer e) - das musst du mir zeigen :stupid: .

Boo-Interpreter, .NET 2.0
Code:
>>> System.Double.Parse("123,45,5");
System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
   bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   bei System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   bei System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
   bei System.Double.Parse(String s)
   bei Input7Module.Main(String[] argv)

gfjs 20. Mär 2006 18:06

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
@ khabarakh

Erst mal vielen Dank für Deine schnelle Unterstützung. Auf die Idee, dass der Punkt als 1000er-Trennzeichen interpretiert werden würde, bin ich dummerweise nicht gekommen. Aber ich würde das natürlich gerne unterdrücken. Fällt Dir eine andere Lösung ein, als die Eingabe eines Punktes zu sperren?

Zitat:

Aber mehrere Kommata oder Buchstaben (außer e) - das musst du mir zeigen .
Das war natürlich "a Schmarr'n", wie man bei uns sagt. Ich meinte damit, dass bei diesen Falscheingaben die Fehlermeldung funktioniert. War ein Flüchtigkeitsfehler, weil ich kurz weg mußte.

Servus aus München

gfjs

Khabarakh 20. Mär 2006 18:29

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
Code:
public static double Parse (
   string s,
   NumberStyles style
)

double Parse(string) = double Parse(string, Numberstyles.Float or NumberStyles.AllowThousands)
Für dein Vorhaben kannst du also
Delphi-Quellcode:
Double.Parse(s, NumberStyles.Float);
benutzen, wahrscheinlich willst du aber zusätzlich noch andere Optionen wie AllowExponent abschalten.

gfjs 20. Mär 2006 18:59

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
Ich glaube, ich löse das so, dass ich als Eingabe nur Ziffern und Komma akzeptieren werde.

Delphi-Quellcode:
Double.Parse(s, NumberStyles.Float);
Hier erhalte ich eine Fehlermeldung "nicht deklarierter Bezeichner "NumberStyle ...". Ich vermute, da fehlt eine Namespace?!

mfg gfjs

Khabarakh 20. Mär 2006 19:04

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
Mein SDK hat mir verraten, dass es sich um System.Globalization handelt :zwinker: .

gfjs 20. Mär 2006 19:07

Re: Problem mit d := System.Double.Parse(TextBox1.Text);
 
Jetzt klappt's! - Vielen Dank!

mfg gfjs


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 Uhr.

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