c# Windows Form Einlesen von Fließkommazahlen/formatiertes Einlesen
-
Wenn man so "zu Fuß" programmiert, braucht man sich um den ganzen Kram mit den "Cultures" und sonstigen Switches von C# nicht zu kümmern. "Cultures"
was für ein Wort!
Und hat es selbst in der Hand, Punkt oder Komma oder beides erlauben, oder ob man Dezimalpunkt ohne führende oder nachfolgende Nullen erlauben will, oder das 1000er Trennzeichen, man hat es ohne diese ganze Entwickleroberfläche mit den 1000 Switches im CODE eindeutig festgelegt, und kann das mit 3 Handgriffen ändern, wenn man will.
Man hat alles selbst im Griff, egal was sich die integrierte Entwicklungsumgebung in der Zwischenzeit wieder an neuen "Cultures" zusammengebastelt hat!
Die Konsole ist eben noch nicht raus aus dem Kopf!
MfG Pascal2009
-
Was bitte sind "Cultures"?
-
Firefighter schrieb:
Was bitte sind "Cultures"?
Ja das frage ich mich auch. Frag die Entwickler von C#
Wir sollten noch eine Kleinigkeit hinzufügen.
Für den Fall Vorzeichen!=0 wär der DOT auf Stringpos 2 nicht erlaubt, für den fall ohne Vorzeichen ja.
Das überprüfen wir am Ende der Zählschleife und achten drauf, daß Pos 1 im String =string[0], Pos2 im String = string[1] ist (!!);
Demnach:
} // Ende Zählschleife
if ((vorzeichen > 0) && (pruef[1] == '.')) error++; // könnten wir erlauben, wollen wir aber nicht erlauben
-
Also damit du nicht lange suchen mußt:
<%@ Page Language="C#" Culture="auto:en-US" UICulture="auto:en-US"%>
<script runat="server">Das wo das Auto fährt, da ist die Kultur (denken die Amis).
-
Boah, DAS meinst du mit Culture...ja ok...mach ma.:D
-
Firefighter schrieb:
Boah, DAS meinst du mit Culture...ja ok...mach ma.:D
Was heißt Boah?
Das kann zu ganz schlimmen Fehlern bei der Validierung der Zahlenstrings führen.
Aus 333.01 wird 33301
Und daher halte ich sowas lieber selbst in der Hand.
Diese Routine zahlenformat.TryParse ist unberechenbar.
Die baut, abhängig von den eingestellten Voreinstellungen, z. B. cultures, nur Scheiße. Wie die Punkte, Kommas oder sonstwas verrechnet ist nicht klar.
Besser ist, NACHDEM das Format der zahl mit der Hand überprüft wurde, die Funktion:
double d1 = Convert.ToDouble(s1);
Ich hab das überprüft, die paßt.
Für 4711.01 liefert double.TryParse interessanterweise den Wert 0 (knapp daneben ist auch vorbei, oder?
TryParse packe ich nicht mehr an.
Solche Mülltonnenfunktionen brauche ich nicht. Dafür hänge ich gedanklich noch zu dicht an der Konsole, um mir solche Frechheiten gefallen lassen zu müssen.
Gruß Pascal2009
-
Es hat eine gewisse Ironie über die "dummen" Frameworkentwickler zu schimpfen wenn man in Wirklichkeit einfach selbst zu dumm ist die Parse-Funktionen richtig zu bedienen. Hat für Aussenstehende einen nicht zu verachtenden Unterhaltungswert, quasi ne Live-Sitcom, so ungefähr wie "The Simple Life" für Programmierer, nenenn wirs "The Simple Mind". Also nur weiter so, habs Popcorn schonmal rausgeholt und warte auf neue, unterhaltsame Theorien
PS: 4711.01 ist je nach eingestellter Culture ein ungültiger float, daher liefert TryParse mit Sicherheit false zurück und out-Wert ist 0 weil nichts geparsed wurde. Wenn man die korrekte Culture angibt kommt auch das erwartete Ergebnis raus.
-
loks schrieb:
Es hat eine gewisse Ironie über die "dummen" Frameworkentwickler zu schimpfen wenn man in Wirklichkeit einfach selbst zu dumm ist die Parse-Funktionen richtig zu bedienen. Hat für Aussenstehende einen nicht zu verachtenden Unterhaltungswert, quasi ne Live-Sitcom, so ungefähr wie "The Simple Life" für Programmierer, nenenn wirs "The Simple Mind". Also nur weiter so, habs Popcorn schonmal rausgeholt und warte auf neue, unterhaltsame Theorien
PS: 4711.01 ist je nach eingestellter Culture ein ungültiger float, daher liefert TryParse mit Sicherheit false zurück und out-Wert ist 0 weil nichts geparsed wurde. Wenn man die korrekte Culture angibt kommt auch das erwartete Ergebnis raus.
Ja loki, laß mal ruhig den Hammer raushängen.
Gegenfrage:
Welche Version von einer Fließkommaumwandlung glaubst du denn, ist
UNTER ALLEN UMSTÄNDEN STABILER? Meine, mit der Hand in die Konsole genagelt, oder deine Plattform mit dem bunten Reigen aller möglichen Cultures, wo heute das rauskommt, und switch, in einem Jahr was anderes?
Ganz sicher bist du viel schlauer als ich, was C# betrifft, ich weiß aber, daß in meinen (noch zu schreibenden) Programmen die Fließkommafunktionen schon jetzt stabil stehen wie ein Fels in der Brandung.
Ohne SICHERE Zahlenwerte ist alles nichts.
Gruß Pascal2009
-
Und noch was, bzgl. live.sitcom:
Man muß ja nicht alles fressen, was die .net anbietet.
Ich entscheide das so, wie das für meine geplanten Projekte am besten ist.
Und wenn mir von außen in meine Fließkomma reingefummelt wird, krieg ich die Allergiemaske,
weil meine (noch zu schreibenden Programme) zu 99 Prozent mit der Berechnung von Fließkommazahlen zu tun haben werden.
Dieser ganze Multikulti-Switch in der .NET entmündigt den Anwender. Da könnten Parameter umgestellt werden, die er bei der Programmierung weder kennen konnte noch billigen würde.
Es geht hier um Zahlen und Berechnungen, COMPUTUNG=BErechnung von Zahlen.
Da laß ich mir von tryparse nicht reinfummeln.
Wie gesagt, die Funktion ist für mich tot. Das hat nichts mit Computing zu tun, mit dem Rechnen mit Zahlen. Da ist so eine Ideologie-Komponente, auf die können wir gern verzichten (und sei es aus lauter Dummheit).
Weil das, was tryparse macht, das haue ich dir auch in 10 Zeilen in die Konsole.
Das ist absolut lächerlich, daß die dann mit so einer lächerlichen Systemfunktion, die sich jeder mit 10 Zeilen selbst berechnen könnte, da noch kryptische Culture Parameter reinquetschen, die dann im Effekt die ganzen Zahlen verfälschen. Das ist so´ne BIG Brother Philosophie. Für mich ist ´ne Zahl ´ne Zahl und sowas, wie tryparse, das fress ich nicht.
MfG Pascal2009
-
loks schrieb:
Also nur weiter so, habs Popcorn schonmal rausgeholt und warte auf neue, unterhaltsame Theorien
Kann ich was vom Popcorn haben ? Hätte auch die Getränke dazu *klimper*
Das ist absolut lächerlich, daß die dann mit so einer lächerlichen Systemfunktion, die sich jeder mit 10 Zeilen selbst berechnen könnte, da noch kryptische Culture Parameter reinquetschen, die dann im Effekt die ganzen Zahlen verfälschen. Das ist so´ne BIG Brother Philosophie. Für mich ist ´ne Zahl ´ne Zahl und sowas, wie tryparse, das fress ich nicht.
Das Problem falscher / nicht idealer Lösungen aufgrund von Unwissenheit kenne ich. Es stellt ja auch kein Problem dar irgendwann zu erkennen das es wieder etwas neues zu lernen gibt und man sich darauf einstellen muss. Aber eine solche Ignoranz finde ich schon beachtlich. Angefangen dabei, das "4711" entgegen 4711 keine Zahl ist sollte die Culture eigentlich zum Nachdenken anregen.
Deine Routine z.B. hätte Sinnvollerweise Validating verwenden können anstatt ein hässliches Konstrukt bei KeyDown. (Irgendwie ignorierst Du einfach alles was nicht mit Deiner Meinung von Codefrickeln übereinstimmt.) Dann wollen wir nicht vergessen, das nebst "-4711" auch "+4711" erlaubt ist. Und da würde mir Deine Routine nun sagen, dass es eine ungültige Zahl ist. (Je nach Kultur kann auch 4711,0815 eine gültige Zahl sein.) Und so könnte man über den "Der Code steht und reicht für 10 Jahre" Seitenweise weiter diskutieren.
-
Knuddlbaer schrieb:
loks schrieb:
Also nur weiter so, habs Popcorn schonmal rausgeholt und warte auf neue, unterhaltsame Theorien
Kann ich was vom Popcorn haben ? Hätte auch die Getränke dazu *klimper*
Das Problem falscher / nicht idealer Lösungen aufgrund von Unwissenheit kenne ich. Es stellt ja auch kein Problem dar irgendwann zu erkennen das es wieder etwas neues zu lernen gibt und man sich darauf einstellen muss. Aber eine solche Ignoranz finde ich schon beachtlich. Angefangen dabei, das "4711" entgegen 4711 keine Zahl ist sollte die Culture eigentlich zum Nachdenken anregen.
Deine Routine z.B. hätte Sinnvollerweise Validating verwenden können anstatt ein hässliches Konstrukt bei KeyDown. (Irgendwie ignorierst Du einfach alles was nicht mit Deiner Meinung von Codefrickeln übereinstimmt.) Dann wollen wir nicht vergessen, das nebst "-4711" auch "+4711" erlaubt ist. Und da würde mir Deine Routine nun sagen, dass es eine ungültige Zahl ist. (Je nach Kultur kann auch 4711,0815 eine gültige Zahl sein.) Und so könnte man über den "Der Code steht und reicht für 10 Jahre" Seitenweise weiter diskutieren.
Jetzt mußt du aber ganz schön die Logik verbiegen, mein Bester.
Wer zum Teufel gibt denn +4711 ein?
Validating will ich nicht verwenden, ich will keydown. Keydown ist nichts, wo mir von .net reingefummelt werden kann, ein lokales Ereignis.
Und ja: +4711 ist eine ungültige zahl.
Die erlaubten Zeichen listet ja das Fehlerfenster auf, + finde ich nicht darin.
Und daß man das Komma nicht verwenden soll, steht auch drin.
Die Routine ist gut, felsenfest, und sichert die Eindeutigkeit des Dialogs mit dem Anwender.
Ich könnte aber mit einer Zeile das Komma freigeben oder das @ als trennzeichen. Könnte ich.
Der Unterschied ist nur: Wenn .NET auf die Idee käme, wäre das in meinen Programmen drin, würde ich die .NET Optionen benutzen, weil dies zur Laufzeit in .NET kompiliert werden.
So aber Aist das in meinen Programmen nicht drin.
Meine Version ist mit dicken Nägeln in die Konsole genagelt, da kommt .NET nicht dran.
Und so soll es auch bleiben, daß ich das selbst entscheide, was in meinen Programmen drin ist oder nicht. Das ist so von der Konsole her im Kopf drin, und so soll es auch bleiben.
MfG Pascal2009
-
Hallo
Das ist doch ganz klar ein Troll. Solche Sprüche, mein Gott.
chrische
-
pascal2009 schrieb:
Weil das, was tryparse macht, das haue ich dir auch in 10 Zeilen in die Konsole.
Das ist absolut lächerlich, daß die dann mit so einer lächerlichen Systemfunktion, die sich jeder mit 10 Zeilen selbst berechnen könnte, da noch kryptische Culture Parameter reinquetschen, die dann im Effekt die ganzen Zahlen verfälschen. Das ist so´ne BIG Brother Philosophie. Für mich ist ´ne Zahl ´ne Zahl und sowas, wie tryparse, das fress ich nicht.
MfG Pascal2009
Cheer! Bitte mehr von diesem Schwachsinn. Ist dir auch nur Ansatzweise bewußt das es je nach Kulturkreis unterschiedliche Schreibweisen für Zahlen gibt? Was machst Du mit Arabern die von rechts nach links schreiben?
-
loks schrieb:
pascal2009 schrieb:
Weil das, was tryparse macht, das haue ich dir auch in 10 Zeilen in die Konsole.
Das ist absolut lächerlich, daß die dann mit so einer lächerlichen Systemfunktion, die sich jeder mit 10 Zeilen selbst berechnen könnte, da noch kryptische Culture Parameter reinquetschen, die dann im Effekt die ganzen Zahlen verfälschen. Das ist so´ne BIG Brother Philosophie. Für mich ist ´ne Zahl ´ne Zahl und sowas, wie tryparse, das fress ich nicht.
MfG Pascal2009
Cheer! Bitte mehr von diesem Schwachsinn. Ist dir auch nur Ansatzweise bewußt das es je nach Kulturkreis unterschiedliche Schreibweisen für Zahlen gibt? Was machst Du mit Arabern die von rechts nach links schreiben?
Was die Araber machen, interessiert mich nicht.
Was aber meine Floats machen, wenn .NET dazwischenfummelt, interessiert mich schon.
Daher hat .NET an meinen Floats nichts zu schaffen, und ich gebe in meinen programmen .NET auch keine Chance dazu. Dann bin ich sicher, daß meine Floats auch passen.
-
Hallo
Du bist einfach nur dumm und ignorant. Sorry, aber das musste sein. Du stellst hier eine Frage und bekommst viele kluge Antworten und zeigst dich völlig beratungssresitent.
chrische
-
chrische5 schrieb:
Hallo
Du bist einfach nur dumm und ignorant. Sorry, aber das musste sein. Du stellst hier eine Frage und bekommst viele kluge Antworten und zeigst dich völlig beratungssresitent.
chrische
Ich bekomme hier überhaupt keine guten Antworten.
80 Prozent von meiner Einsteigerinfo ist aus dem Google, während sich hier im Forum die Leute aufspielen wie sonstwas. Wenn bei einem Miniatur-Problem wie man so eine Fließkomma-Eingabe hinbekommt,
DIE ICH IN PASCAL AUF DER KONSOLE IN 5 MINUTEN PROGRAMMIEREN WÜRDE
keine wirkliche Hilfe kommt, sondern fast nur Rätselraten und Geschwätz, und ich mir das als 3-Tages Einsteiger in c# ergoogeln muß, dann spricht das nicht gerade für die Kompetenz hier im Forum.
Ich hab den Eindruck, die Leute hier blicken selbst nicht durch. Durchblicken ist, auf eine Frage konkreten Code reinstellen und nicht zu schwätzen.
Also wenn schon keine Hilfe, dann meckert auch nicht.
Ich hatte gefragt, wie man solche Routinen für das gesamte Programm verfügbar machen kann, nach der OOP Philosophie, Antwort keine.
Ich hatte nach der grundsätzlichen strukturierung von c# gefragt, Antwort keine.
Das Forum hier war mir bis jetzt keine Hilfe. Das ist weniger als Googlen.
Also spiel dich nicht so auf, du kleine Mohrrübe.
Das bißchen, was du mir im Programmieren in deiner Sprache voraus hast, habe ich durch Googlen in spätestens 3 Monaten erledigt.
Noch Fragen, Kienzle?
-
Dann tue allen hier den Gefallen und suche Rat in einer anderen Community.
-
Knuddlbaer schrieb:
Dann tue allen hier den Gefallen und suche Rat in einer anderen Community.
Kannst du eine empfehlen?
-
Da Du mit Qualität nicht zufrieden bist kann ich keine Empfehlen. Aber mit Google kommst Du ja gut zurecht, such einfach nach einer und schau welches Forum die meisten Frickler am start hat.
-
Hallo
pascal2009 schrieb:
Ich bekomme hier überhaupt keine guten Antworten.
Doch, aber du hörst nicht zu.
pascal2009 schrieb:
80 Prozent von meiner Einsteigerinfo ist aus dem Google, während sich hier im Forum die Leute aufspielen wie sonstwas. Wenn bei einem Miniatur-Problem wie man so eine Fließkomma-Eingabe hinbekommt,
Du hast doch Antworten bekommen, aber sie nicht für gut befunden. Auf welcher Grundlage sein mal dahingestellt.
pascal2009 schrieb:
DIE ICH IN PASCAL AUF DER KONSOLE IN 5 MINUTEN PROGRAMMIEREN WÜRDE
Mach es bitte einfach.
pascal2009 schrieb:
Ich hatte gefragt, wie man solche Routinen für das gesamte Programm verfügbar machen kann, nach der OOP Philosophie, Antwort keine.
Ich hatte nach der grundsätzlichen strukturierung von c# gefragt, Antwort keine.
Erstens kann man nicht jede Frage ad hoc beantworten, zumal wenn es sich um ein Forum handelt und zweitens hast du sehr wohl Antworten bekommen.
pascal2009 schrieb:
Das Forum hier war mir bis jetzt keine Hilfe. Das ist weniger als Googlen.
Dann tu das doch einfach. Dir fehlen eh die Grundlagen...
pascal2009 schrieb:
Also spiel dich nicht so auf, du kleine Mohrrübe.
Das bißchen, was du mir im Programmieren in deiner Sprache voraus hast, habe ich durch Googlen in spätestens 3 Monaten erledigt.
Glaube ich auch, aber dazu solltest du auf Leute hören, die mehr Erfahrung als du haben.
chrische