SetFormat


Bestimmt das Format für Ganzzahlen (integers) und Gleitkommazahlen (floating point numbers), die durch mathematische Operationen gebildet werden.

SetFormat, NumberType, Format

Parameter

NumberType

Entweder INTEGER oder FLOAT (Ganzzahl oder Gleitkommatzahl).

Format

Für NumberType INTEGER können H oder HEX für die hexadezimale oder D für die dezimale Darstellung angegeben werden. Alle hexadezimalen Zahlen beginnen mit dem Präfix 0x (z.B. 0xFF).

Für NumberType FLOAT ist das Parameterformat Gesamtstellenzahl.Nachkommastellen (z.B. 0.6). Ab Version v1.0.46.11+ kann der Buchstabe "e" für die wissenschaftliche Notation angehängt werden, z.B. 0.6e oder 0.6E (der Buchstabe wird in den Zahlen wie vorgegeben groß oder klein dargestellt). Hinweis: In AutoHotkey 1.x  muss die wissenschaftliche Notation einen Dezimalpunkt enthalten, 1.0e1 ist z.B. gültig, 1e1 aber nicht.

Gesamtstellenzahl ist üblicherweise 0, damit die Zahlen nicht mit führenden Leerzeichen bzw. Nullen aufgefüllt werden. Bei einem höheren Wert werden die Zahlen ggf. mit einer entsprechenden Anzahl von führenden Leerzeichen bzw. Nullen (s.u.) auf die vorgegebene Stellenzahl erweitert.

Nachkommastellen ist die Anzahl der Nachkommastellen, die ggf. nach Rundung angezeigt werden. Wenn hier nichts oder Null angegeben wird, werden weder der Nachkommaanteil noch der Dezimalpunkt angezeigt, d.h., die Zahl wird als Ganzzahl (integer) gespeichert, nicht als Gleitkommazahl.

Auffüllen (padding): Wenn die Gesamtstellenzahl größer als die tatsächliche Stellenzahl ist, werden auf der linken Seite entsprechend viele Leerzeichen vorangestellt, d.h., die Zahl wird rechtsbündig. Für eine linksbündige Darstellung muss der Gesamtstellenzahl ein Minuszeichen vorangestellt werden. Wenn mit Nullen aufgefüllt werden soll, muss der Gesamtstellenzahl eine Null vorangestellt werden (z.B. 06.2).

Anmerkungen

Das Standardformat für Ganzzahlen ist das Dezimalformat, für Gleitkommazahlen ist der Standardwert für Gesamtstellenzahl.Nachkommastellen = 0.6. Für jeden neu gestarteten Thread (wie z.B. eine Hotkeyroutine, eine eigene Menüroutine oder eine Timeroutine) gelten die Standardeinstellungen, wenn die Anweisung SetFormat nicht in der Auto-Execute Section (dem obersten Teil des Skripts) verwendet wurde.

Mit "If Var Is Number/Integer/Float" kann man bestimmen, ob eine Variable einen numerischen Wert enthält.

Eine Variable, die eine Ganzzahl enthält, kann durch Addition von 0 in das eingestellte Ganzzahlformat (HEX oder D) konvertiert werden, z.B. mit Var += 0. Genauso kann eine Variable, die eine Gleitkommazahl (oder eine Ganzzahl) enthält, durch Addition von 0.0 in das eingestellte Gleitkommazahlenformat konvertiert werden, z.B. mit  Var += 0.0. Die Konvertierung einer Gleitkommazahl in eine Ganzzahl ist jedoch mit Round(), Ceil() oder Floor() einfacher.

Die interne Variable A_FormatInteger enthält das aktuelle Ganzzahlformat (H oder D), A_FormatFloat enthält das aktuelle Gleitkommazahlenformat.

Um eine Ganzzahl mit Nullen oder Leerzeichen aufzufüllen, ohne sie in eine Gleitkommazahl zu konvertieren, nutzt man z.B. folgende Anweisungen:

Var := "          " . Var ; Die Anführungszeichen enthalten 10 Leerzeichen. Um mit Nullen aufzufüllen, ersetzt man die Leerzeichen durch Nullen.
StringRight, Var, Var, 10 ; Damit wird die Zahl in Var mit führenden Leerzeichen auf 10 Stellen aufgefüllt.
Var := SubStr(" " . Var, -9) ; Eine einzeilige Alternative für die beiden o.a. Zeilen.

Gleitkommazahlenformat

Weil AutoHotkey alle Variablen als Zeichenfolgen (Strings) speichert, wird die gespeicherte Genauigkeit von Gleitkommazahlen durch den Wert von Nachkommastellen bestimmt. Das bedeutet, wenn eine Variable einmal gerundet gespeichert ist, ist die weggerundete Genauigkeit verloren und kann ohne Wiederholung der Berechnung mit einem höheren Wert in Nachkommastellen nicht zurückgewonnen werden.

Alle durch eine Auffüllung führenden oder angehängten Leerzeichen gehen verloren, wenn der Wert explizit einer anderen Variablen zugewiesen wird. Das kann nur mit dem Zuweisungsoperator (:=) oder AutoTrim verhindert werden.

Damit das aktuelle Gleitkommazahlenformat für das Ergebnis einer mathematischen Operation wie einer Addition berücksichtigt wird, muss zumindest einer der Operanden einen Dezimalpunkt enthalten.

Eine Ganzzahlvariable kann durch Addition von 0.0 in eine Gleitkommazahl konvertiert werden, z.B. Var += 0.0. Wenn für das aktuelle Gleitkommazahlenformat aber keine Nachkommastellen vorgegeben sind, nutzt man stattdessen:

If Var Is Integer
Var = %Var%.0

Hexadezimales Format

Alle hexadezimalen Zahlen beginnen mit dem Präfix 0x (z.B. 0xA9). Sie können überall dort verwendet werden, wo ein numerischer Wert erwartet wird. Sleep 0xFF ist z.B. gleichbedeutend mit Sleep 255, unabhängig davon, welches Format für Ganzzahlen mit SetFormat aktuell gesetzt ist.

Um eine Ganzzahl vom dezimalen Format in das hexadizimale zu konvertieren, verwendet man z.B. folgende Anweisungen (für die umgekehrte Konvertierung tauscht man die erste und dritte Anweisung):

SetFormat, Integer, Hex
VariableMitGanzzahl += 0
SetFormat, Integer, D

Siehe auch

Zuweisung von Ausdrücken (:=), EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, If Var Is type

Beispiele

Var = 11.333333
SetFormat, Float, 6.2
Var -= 1 ; Setzt Var auf den Inhalt 10.33 mit einem führenden Leerzeichen, weil die Gesamtstellenzahl 6 ist.
SetFormat, Float, 0.2
Var += 1 ; Setzt Var auf den Inhalt 10.33 ohne Auffüllung.
SetFormat, Float, 06.0
Var += 0 ; Setzt Var auf den Inhalt 000011
SetFormat, Integer, Hex
Var += 0 ; Setzt Var auf den Inhalt 0xb
SetFormat, Integer, D