SetFormat

Bestimmt das Format von Integern und Floating-Point-Zahlen, die das Ergebnis von mathematischen Operationen sind.

Veraltet: Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die Format-Funktion.

SetFormat, Zahlentyp, Format

Parameter

Zahlentyp

Muss entweder IntegerFast, FloatFast, Integer oder Float sein (die zwei Fast-Methoden benötigen [v1.0.48+]; siehe Anmerkungen).

Format

Wenn der Zahlentyp Integer oder IntegerFast ist, kann H oder HEX für hexadezimal, oder D für dezimal angegeben werden. Hexadezimale Zahlen beginnen mit dem 0x-Präfix (z. B. 0xFF). [AHK_L 42+]: Die Buchstaben A-F von hexadezimalen Integern sind kleingeschrieben, wenn dieser Parameter h ist, und großgeschrieben, wenn er H ist.

Wenn der Zahlentyp Float oder FloatFast ist, kann Gesamtbreite.Dezimalstellen angegeben werden (z. B. 0.6). [v1.0.46.11+]: Der Buchstabe "e" kann angefügt werden, um eine wissenschaftliche Schreibweise wie z. B. 0.6e zu erzeugen, oder "E", um z. B. 0.6E zu erzeugen. Hinweis: In AutoHotkey 1.x muss die wissenschaftliche Schreibweise einen Dezimalpunkt enthalten; z. B. wäre 1.0e1 gültig, aber nicht 1e1.

Gesamtbreite ist üblicherweise 0, um die Zahl nicht mit Nullen oder Leerzeichen aufzufüllen. Ein höherer Wert wird Zahlen mit Leerzeichen oder Nullen auffüllen (siehe Bemerkungen), um sie auf diese Breite zu bringen.

Dezimalstellen ist die Anzahl der Dezimalstellen, die angezeigt werden sollen (mit einer Rundung). Wenn diese Spezifikation leer oder 0 ist, wird weder der Nachkommabereich noch der Dezimalpunkt angezeigt; das bedeutet, dass Floating-Point-Ergebnisse nicht als Floating-Point-Zahlen, sondern als Integer angezeigt werden. Der Standardwert ist 6.

Auffüllen: Wenn Gesamtbreite hoch genug zum Auffüllen ist, werden Leerzeichen an die linke Seite angefügt; das bedeutet, dass jede Zahl rechtsbündig sein wird. Um die Zahl stattdessen linksbündig zu machen, fügen Sie vor Gesamtbreite ein Minuszeichen an. Um die Zahl mit Nullen statt Leerzeichen zu füllen, fügen Sie vor Gesamtbreite eine 0 an (z. B. 06.2).

Fast- vs. Slow-Modus

[v1.0.48+]: Es kann IntegerFast statt Integer und FloatFast statt Float verwendet werden.

Sollte der Slow-Modus "Integer" oder "Float" irgendwo im Skript verwendet werden (ohne dass diese SetFormat-Zeile ausgeführt werden muss), wird das Zwischenspeichern von Integern bzw. Floating-Point-Zahlen deaktiviert, sobald das Skript startet.

Floating-Point-Format

[v1.0.48+]: Floating-Point-Variablen haben intern eine Genauigkeit von 15 Stellen, sofern SetFormat Float (also der Slow-Modus) nicht im Skript irgendwo vorkommt. Ist dies der Fall, wird die Genauigkeit von Floating-Point-Zahlen über Dezimalstellen bestimmt (wie es schon in den Versionen vor 1.0.48 war). Mit anderen Worten: Sobald ein Floating-Point-Ergebnis in eine Variable gespeichert wurde, wird die zusätzliche Genauigkeit verloren gehen und nicht wiederverwendbar sein, ohne die Berechnung nochmals mit so etwas wie SetFormat, Float, 0.15 durchzuführen. Damit diese Genauigkeit nicht verloren geht, sollten Sie auf SetFormat Float verzichten oder stattdessen SetFormat FloatFast nutzen.

Egal ob der Slow- oder Fast-Modus aktiv ist - Floating-Point-Ergebnisse und -Variablen werden auf die angegebenen Dezimalstellen abgerundet, wann immer sie angezeigt oder in Zeichenketten umgewandelt werden (z. B. MsgBox oder FileAppend). Um die volle Präzision zu sehen, verwenden Sie so etwas wie SetFormat, FloatFast, 0.15.

Um eine Floating-Point-Zahl in einen Integer umzuwandeln, verwenden Sie Var := Round(Var), Var := Floor(Var) oder Var := Ceil(Var). Um einen Integer in eine Floating-Point-Zahl umzuwandeln, addieren Sie ihn mit 0.0 (z. B. Var += 0.0) oder nutzen Sie so etwas wie MeinFloat := Round(MeinInteger, 1).

Die interne Variable A_FormatFloat enthält das aktuelle Floating-Point-Format (z. B. 0.6).

Integer-Format

Integer-Ergebnisse werden normalerweise im dezimalen Format angezeigt, nicht im hexadezimalen. Um auf hexadezimal umzuschalten, verwenden Sie SetFormat, IntegerFast, Hex. Damit kann man auch ein Integer in eine hexadezimale Zahl umwandeln (oder umgekehrt), wie in dem Beispiel ganz unten.

Direkt im Skript angegebene Integer können als hexadezimale oder dezimale Zahlen geschrieben werden. Alle hexadezimale Integer beginnen mit dem 0x-Präfix (z. B. 0xA9). Sie können überall dort eingesetzt werden, wo ein numerischer Wert erwartet wird. Zum Beispiel wäre Sleep 0xFF das gleiche wie Sleep 255, egal welches Integer-Format von SetFormat gesetzt wurde.

AutoHotkey unterstützt vorzeichenfähige 64-Bit-Integer im Bereich von -9223372036854775808 (-0x8000000000000000) bis 9223372036854775807 (0x7FFFFFFFFFFFFFFF).

Die interne Variable A_FormatInteger enthält das aktuelle Integer-Format (H oder D).

Allgemeine Bemerkungen

Wenn SetFormat nie im Skript verwendet wird, sind Integer standardmäßig im Dezimalformat und Floating-Point-Zahlen standardmäßig im Format Gesamtbreite.Dezimalstellen = 0.6. Jeder neu gestartete Thread (z. B. ein Hotkey, ein benutzerdefinierter Menüpunkt oder eine zeitgesteuerte Subroutine) verwendet zu Beginn diese Standardeinstellungen. Um diese zu ändern, muss SetFormat im automatischen Ausführungsbereich (ganz oben im Skript) angegeben werden.

Bei einer altmodischen Zuweisung wie x = %y% werden Leerzeichen am Anfang oder Ende weggelassen (z. B. beim Auffüllen). Um das zu verhindern, verwenden Sie AutoTrim oder den Doppelpunkt-Gleich-Operator (z. B. x := y).

Ob eine Variable einen numerischen Wert enthält, können Sie mit "if var is number/integer/float" feststellen.

Das folgende Beispiel zeigt, wie ein Integer mit Nullen oder Leerzeichen gefüllt werden kann, ohne Floating-Point-Berechnungen durchführen zu müssen:

Var := "          " . Var     ; Zwischen den Anführungszeichen sind 10 Leerzeichen.  Um mit Nullen zu füllen, ersetzen Sie die Leerzeichen mit Nullen.
Var := SubStr(Var, -9)  ; Dies füllt die Zahl in Var mit genügend Leerzeichen auf, um sie auf eine Länge von maximal 10 Zeichen zu bringen.
Var := SubStr("          " . Var, -9)  ; Eine einzeilige Alternative für die oberen zwei Zeilen.

Siehe auch

Format(), Caching, Ausdruckszuweisung (:=), EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, if Var is Typ

Beispiele

#1

Var := 11.333333
SetFormat, float, 6.2
Var -= 1  ; Setzt Var auf 10.33 und aufgrund einer Gesamtbreite von 6 mit einem Leerzeichen davor.
SetFormat, float, 0.2
Var += 1  ; Setzt Var auf 11.33 ohne Leerzeichen davor.
SetFormat, float, 06.0
Var += 0  ; Setzt Var auf 000011

; Wandelt einen dezimalen Integer in hexadezimal um:
SetFormat, IntegerFast, hex
Var += 0  ; Setzt Var (die vorher 11 enthielt) auf 0xb.
Var .= ""  ; Aufgrund des Fast-Modus notwendig.
SetFormat, IntegerFast, d