SetFormat


设置数学运算得到的整数或浮点数的格式。

SetFormat, NumberType, Format

参数

NumberType

必须是 INTEGER/整数 或者 FLOAT/浮点数 。

Format

上一个参数 NumberType 使用 INTEGER 的话,这个参数必须是表示十六进制的 HEX(可以简写为 H),或者表示十进制的 D 。十六进制的数字全部是以 0x 开头的(例如 0xFF)。

上一个参数 NumberType 使用 FLOAT 的话,这个参数的格式为 总宽度.小数位数(例如 0.6)。在 v1.0.46.11 以上的版本中,可以在后面添加字母“e”表示使用科学计数法显示结果,例如 0.6e 或者 0.6E(使用大写字母 E 的话在结果中显示的就是大写字母 E 而不是小写字母 e)。注意:在 AutoHotkey 1.x 版本中,使用科学计数法显示的时候,这个参数必须包含小数点,例如 1.0e1 是正确的,而 1e1 是错误的。

总宽度 一般使用 0 ,表示计算结果不需要使用空格或 0 来填充。如果 总宽度 大于实际宽度,将会使用空格或 0(参看下面)来填充至指定宽度。注意:总宽度 包括小数点。

小数位数 表示要显示的小数部分宽度(超出部分的四舍五入)。如果留空或使用 0 ,结果中将不会显示小数点以及小数部分,也就是说,结果会以整数的方式存储,而不是浮点数。

填充:如果 总宽度 大于实际宽度,结果中将会使用空格来填充左边缺少的宽度,也就是说,数字将会右对齐显示。要使数字左对齐显示,在 总宽度 中使用负数。要使用 0 来填充,在 总宽度 中加前缀 0(例如 06.2)。

注意

如果在脚本中未使用这个命令,整数默认使用十进制,浮点数默认使用 总宽度.小数位数 = 0.6 。每一个新运行的 Thread/线程(例如一个 hotkey/热键custom menu item/自定义菜单,或 timed/定时器 事件)会将该命令的设置重置为默认值。要更改该命令的默认值,可以将该命令放在脚本的自动执行区域(脚本的顶部)。

你可以检测一个变量是否存储了数字类型的值,使用 if var is number/integer/float

一个包含整数的变量与 0 相加,可以强制转换为当前设置的整数格式(十六进制或十进制),例如:Var += 0 。类似的,一个包含浮点数(或整数,需要的话)的变量与 0.0 相加, 可以强制转换为当前设置的浮点数格式,例如:Var += 0.0 。如果需要将一个浮点数转换为一个整数,使用 Round()Ceil() ,或者 Floor() 会更加方便。

内置变量 A_FormatInteger 存储了当前整数格式的设置(H 或 D)。A_FormatFloat 存储了当前浮点数格式的设置

要对整数使用空格或 0 来填充至指定宽度的话,参考下面的例子:

Var := "          " . Var     ; 引号中包含了 10 个空格。要使用 0 来填充的话,用 0 替换空格。
StringRight, Var, Var, 10  ; 使用空格将变量 Var 中的数字填充至 10 位宽度。
Var := SubStr("          " . Var, -9)  ; 上面两行代码的整合。

浮点格式

因为 AutoHotkey 将所有的变量当作字符串来存储,所以存储的浮点数的精度是由 小数位数 决定。也就是说,一旦浮点数存入了变量中或者变量进行了舍入操作,丧失的精度就再也不能还原了,除非再进行一次相同的运算,并设置更大的 小数位数

在将一个浮点数变量赋值给另外一个变量的时候,浮点数前面的空格填充会被删除掉。要避免这种情况,使用 冒号-等号 运算符(:=) 或者 AutoTrim

要使当前设置的浮点数格式在数学运算中生效,例如 addition ,运算式中至少要有一个数字包含小数点。

一个包含整数的变量可以通过与 0.0 相加转换为浮点数,例如 Var += 0.0 。但是,如果当前的浮点数格式中没有指定 小数位数 ,使用这个来代替:

if Var is integer
    Var = %Var%.0

十六进制格式

十六进制数字以 0x 为前缀(例如 0xA9)。它可以使用在任何一个需要数字做参数的地方。例如,Sleep 0xFF 等同于 Sleep 255 ,并且这与当前 SetFormat 中对整数格式的设置无关。

要将一个整数从十进制转换为十六进制,参考这个例子(也可以反过来转换):

SetFormat, integer, hex
VariableContainingAnInteger += 0
SetFormat, integer, d

相关命令

Expression assignment (:=), EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, if var is type

示例

Var = 11.333333
SetFormat, float, 6.2
Var -= 1  ; Var 的值为 10.33 ,并且开头有一个空格,因为总宽度是 6 。
SetFormat, float, 0.2
Var += 1  ; Var 的值为 11.33 并且没有空格。

SetFormat, float, 06.0
Var += 0  ; Var 的值为 000011

SetFormat, integer, hex
Var += 0  ; Var的值为 0xb
SetFormat, integer, d