Jump to content

Abfrage ob Zahl


---
 Share

Recommended Posts

Hallo,

folgendes Szenario:

ich erzeuge über Ergebnis=inquireNumber() eine Abfrage für eine Eingabe für den Maschinenbediener.
Als Eingabe soll natürlich eine Zahl erfolgen, z.B. 0.01.
Jetzt möchte ich danach abfragen
if Ergebnis == number
message(...)
endif
Wie kann ich das gestalten?
Was ist der Paramater für die Abfrage einer Zahl, ich komme nicht drauf? Oder wie kann ich das sonst gestalten?
Wäre super wenn mir hier jemand einen Tip geben könnte.
Link to comment
Share on other sites

Akzeptiert denn die Funktion inquireNumber() auch andere Eingaben? Das wäre ja suboptimal 😃

Gerade mal ausprobiert: Wenn man eine Zahl eingibt, wird die Zahl zurückgegeben. Trägt man Buchstaben oder irgendwas anderes ein, dann wird 0 (Null) zurückgegeben. Das ist natürlich wiederum suboptimal, weil man so nicht eindeutig auf die Eingabe von "0" reagieren kann. 😕

Aber solange es nur um Werte ungleich Null geht, kannst du einfach schreiben
Variable=inquireNumber()
if Variable <> 0 then
	message("Zahl eingegeben")
else
	message("Was anderes (oder 0) eingegeben")
endif
Wenn allerdings auch die Null vorkommen kann, dann wird es komplexer. Da habe ich momentan keine wirkliche Idee.
Link to comment
Share on other sites

With inquireNumber in Result element - if you use wrong decimal point it gets only whole number.
Wouldn't be inquireText much usefull?
Link to comment
Share on other sites

Ja ist nicht so einfach. Habe bisher auch keine 100% zufriedenstellende Lösung gefunden und vorerst auf die Abfrage verzichtet. Wäre auch nur eine zusätzliche Absicherung gewesen.
Habe jetzt auch inquireText genutzt und lasse fall Eingabe "," kommt dieses in "." umwandeln.
Link to comment
Share on other sites

Der Knackpunkt ist m.E. die Unterscheidung, ob ein Wert Null bei der Abfrage von der Eingabe des Bedieners stammt oder von der Funktion zurückgegeben wurde, weil z.B. der Bediener einen Text statt einer Zahl eingegeben hat.
Alles andere ist ja eigentlich schon durch inquireNumber() sichergestellt.

Man kann übrigens auch andere Methoden benutzen, um auf eine Zahl zu prüfen. Eine wäre die Eingabe als Text und dann Asuwertung mit val(), was noch den Vorteil hätte, daß evtl. eingegebene Kommas automatisch in einen Dezimalpunkt gewandelt werden. Aber auch hier wieder: Wenn keine verwertbare Zahl eingegeben wurde, gibt val() Null zurück und man hat wieder dasselbe Problem.

Dann gäbe es noch die Möglichkeit, die Erweiterung .isNumber zu benutzen ( z.B. if variable.isNumber then....)
Aber auch hier wieder: Wenn es keine Zahl ist, wird Null zurückgegeben und man weiß wieder nicht, woher die kommt.

Das einzige was mir noch einfällt wäre, daß man die Zahl als Text eingibt und dann zuerst mal den String analysiert, ob er was anderes als Nullen und vielleicht noch Dezimalpunkte/Kommas enthält. Da reicht es ja, nach dem ersten unterschiedlichen Zeichen zu suchen. Und erst wenn dem nicht so ist, benutzt man val(), und wenn das dann Null zurückgibt, war's keine Zahl. Sehr umständlich, und fraglich ob sich der Aufwand lohnt.... 😕
Link to comment
Share on other sites

Ja genau auf die Lösung mit val bin ich auch gekommen, aber habe dass dann doch wieder zerschlagen weil es nicht 100% das war und ich wollte es dann nicht weiter verfolgen. Ein Restrisiko besteht jetzt bei der Eingabe, aber ich denke ein bisschen Verantwortung kann man dem Maschinenbediener trotzdem noch überlassen, in dem Sinn dass er eine Zahl und keine Buchstaben eingibt.
Link to comment
Share on other sites

Wobei ich mich schon frage, warum inquireNumber() überhaupt was anderes als Zahlen zulässt. Völlig widersinnig. Das ist für mich reine Faulheit der Programmierer.
Link to comment
Share on other sites

 Share

×
×
  • Create New...