设置数学运算得到的整数或浮点数的格式。
SetFormat, NumberType, Format
如果在脚本中未使用这个命令,整数默认使用十进制,浮点数默认使用 总宽度.小数位数 = 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