Variable aus String (Edit) mit Dezimalstellen erzeugen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by Optimus Prime » 02 Sep 2020, 05:45

Hallo Zusammen,

nun stolpere ich gerade über das Komma bei AHK. Ich möchte gerne aus einem String, der in ein Edit (vEingabe) eingegeben werden sollte, eine Dezimalzahl herausholen.
Der String lautet z.B.: 12345
Die Variable soll nun aber die Dezimalzahl 123,45 enthalten, um damit weiter rechnen zu können.

Ich habe mal begonnen im Skript ersteinmal 2 Variablen zu erstellen und diese mit " . " verbunden.

Code: Select all

Var1 := Substr(Eingabe, 1, 3)
Var2 := Substr(Eingabe, 4, 2)

Var3 := Var1 . Var2

Dies führt dazu dass, die komplette Zahl wieder zusammengefügt wird, ein Komma lässt sich dort nicht einfügen!
Welche Möglichkeiten gibt es hier eine Dezimalzahl aus dem String zu erzeugen?
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by jNizM » 02 Sep 2020, 06:11

Warum schreibst du nicht die Zahl mit Dezimaltrenner ins Edit-Feld?
Desweiteren brauchst du, um in AHK mit Zahlen zu rechnen den "." als Trenner.

Ich mach das, indem ich die Zahl dann mit StrReplace von , auf . switche. So kann man oben im Edit-Feld beides benutzen, aber das Rechnen geht mit AHK.

ZahlNeu := StrReplace(ZahlAlt, "`,", ".")


z.B.

Code: Select all

Gui, Margin, 10, 10
Gui, Add, Text, xm ym   w200, % "Mit StrReplace von , auf ."
Gui, Add, Edit, xm y+5  w200 gCALC1 vEdt1
Gui, Add, Edit, xm y+5  w200 gCALC1 vEdt2
Gui, Add, Edit, xm y+10 w200 vEdt3

Gui, Add, Text, x+10 ym w200, % "Ohne StrReplace von , auf ."
Gui, Add, Edit, xp y+5  w200 gCALC2 vEdt4
Gui, Add, Edit, xp y+5  w200 gCALC2 vEdt5
Gui, Add, Edit, xp y+10 w200 vEdt6

Gui, Show, AutoSize
return

GuiClose:
GuiEscape:
ExitApp

CALC1:
	Gui, Submit, NoHide
	Edt1 := StrReplace(Edt1, "`,", ".")
	Edt2 := StrReplace(Edt2, "`,", ".")
	GuiControl,, Edt3, % Edt1 + Edt2
return

CALC2:
	Gui, Submit, NoHide
	GuiControl,, Edt6, % Edt4 + Edt5
return
Bei beiden kannst du zwar die Zahl mit Komma eintragen, aber nur mit StrReplace zu Punkt kannst du dann in AHK rechnen.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile

KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen  Topic is solved

Post by KHA » 02 Sep 2020, 06:16

Ich weiß nicht, ob ich dich richtig verstehe, aber ein Komma zwischen 2 Variable, erzeugst du so:

Code: Select all

Eingabe := 12345
Var1 := Substr(Eingabe, 1, 3)
Var2 := Substr(Eingabe, 4, 2)

Var3 := Var1 . "," . Var2
MsgBox, % var3

User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by jNizM » 02 Sep 2020, 06:24

Aber falls es wirklich so ist, dass du eine Zahl ohne Dezimaltrenner kopierst und die letzten zwei Zahlen getrennt werden, dann ja so wie KHA es gezeigt hat.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by Optimus Prime » 02 Sep 2020, 07:40

Danke ihr 2. So funktioniert es bestens. Der Tip mit StrReplace passt mir da sehr gut rein.
Das Komma ist beim Kopieren des Strings leider nicht vorhanden, deshalb will ich es in die Anwendung basteln :)
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

effel
Posts: 543
Joined: 16 Jan 2018, 13:34

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by effel » 02 Sep 2020, 09:12

Code: Select all

Eingabe := 32145
Eingabe := StrReplace(Eingabe, Substr(Eingabe, 4, 2), "," Substr(Eingabe, 4, 2))
MsgBox, % Eingabe ; 321,45

Code: Select all

Eingabe := 1234567890
Eingabe := StrReplace(Eingabe, Substr(Eingabe, -1), "," Substr(Eingabe, -1))
MsgBox, % Eingabe ; 12345678,90

just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by just me » 03 Sep 2020, 02:32

@effel, schau mal:

Code: Select all

#NoEnv
Str := 123123123
Dez := SubStr(Str, 1, -2) . "," . SubStr(Str, -1)
MsgBox, %Dez%

Eingabe := 123123123
Eingabe := StrReplace(Eingabe, Substr(Eingabe, -1), "," Substr(Eingabe, -1))
MsgBox, %Eingabe%

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by haichen » 03 Sep 2020, 03:15

Der String lautet z.B.: 12345
Die Variable soll nun aber die Dezimalzahl 123,45 enthalten, um damit weiter rechnen zu können.
Ich hab vielleicht irgendwas nicht verstanden, aber für mich wäre das hier die Lösung:

Code: Select all

str := 123123123
zahl:=str/100

effel
Posts: 543
Joined: 16 Jan 2018, 13:34

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by effel » 03 Sep 2020, 10:11

Danke Just Me

so?

Code: Select all

Eingabe := 123456 ; 1234,56
Eingabe := Substr(Eingabe, 1, StrLen(Eingabe)-2) "," Substr(Eingabe, StrLen(Eingabe)-1, 2)
MsgBox, % Eingabe
Eingabe := 123123123123 ; 1231231231,23
Eingabe := Substr(Eingabe, 1, StrLen(Eingabe)-2) "," Substr(Eingabe, StrLen(Eingabe)-1, 2)
MsgBox, % Eingabe
oder mit BoBo`s Thousand/Tausend Separator:

Code: Select all

Eingabe := 1234567890
Eingabe := Substr(Eingabe, 1, StrLen(Eingabe)-2) "," Substr(Eingabe, StrLen(Eingabe)-1, 2)
MsgBox, % ts(Eingabe) ; 12.345.678,90

ts(number) { ; https://www.autohotkey.com/boards/viewtopic.php?f=10&t=77399
	Static E, UD													; muß static oder global deklariert werden 
	dcpl:=	InStr(number,",") ? (StrSplit(number,","), del := ",")	; evtl vorhandene nachkommastellen ermitteln
		:	InStr(number,".") ?	(StrSplit(number,"."), del := ".")	; ... decimal place (anglo-american style). 
		:	""
	Gui, Add, Edit, vE												; 'buddy-control' des folgenden UD. Diese variable enthält den ts-formatierten wert.
	Gui, Add, UpDown, Range-2147483648-2147483647 vUD, % number		; vUD = unformatierter wert: https://ahkde.github.io/docs/commands/GuiControls.htm#UpDown  
	GuiControlGet, ConvNo,, E										; abfrage des ts-formatierten wertes 
	Gui, Destroy													; Nero-Befehl
	Return ConvNo . del . dcpl[2]									; rückgabe des ts-formatierten wertes (mit ggf nachkommastellen)
	}

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by haichen » 04 Sep 2020, 01:04

Hi Effel,
würde mich mal interessieren, warum man den Eingabewert nicht einfach durch 100 teilen kann?
Im Eingang steht doch sogar, dass man mit dem Ergebnis weiterrechnen will. Das geht mit keiner der anderen Varianten.
Autohotkey behandelt den Zahlenstring der Eingabe als Zahl.
In der Hilfe steht: "Numerische Zeichenketten: Eine Kette von Zahlen (oder von anderen unterstützten Zahlenformaten) wird automatisch als Zahl interpretiert, wenn eine mathematische Operation oder ein Vergleich dies erfordert."

Code: Select all

Eingabe := 123456
Eingabe:= Eingabe/100
MsgBox, % Eingabe ; =>1234.560000
;Formatiert:
MsgBox, %  "Formatiert: " Format("{:.2f}", Eingabe) " oder gerundet: " Round(Eingabe, 2) ; =>1234.56

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Variable aus String (Edit) mit Dezimalstellen erzeugen

Post by haichen » 04 Sep 2020, 01:31

Um ins deutsche Format mit Punkt als Tausendertrenner und dem Komma für die Dezimalstellen zu formatieren hier noch der Link zu einer von jNizM wunderbaren Funktionen:
https://www.autohotkey.com/boards/viewtopic.php?p=56006#p56006

Post Reply

Return to “Ich brauche Hilfe”