设置数学运算得到的整数和浮点数的格式。
SetFormat, NumberType, Format
必须为 IntegerFast, FloatFast, Integer 或 Float (其中两种快速模式需要 v1.0.48+; 请参阅 备注).
当 NumberType 为 Integer 或 IntegerFast, 对于十六进制数请指定 H 或 HEX, 而十进制则指定 D. 十六进制数必须以前缀 0x 开头 (例如 0xFF). [AHK_L 42+]: 当此参数为 h
时十六进制数会被格式化为含有小写数字 A-F, 而为 H
时则为大写形式.
当 NumberType 为 Float 或 FloatFast,请指定总宽度.小数位数
(例如 0.6
)。在 v1.0.46.11+,可以在后面添加字母“e”来得到科学计数法表示的结果;例如 0.6e
或 0.6E
(使用大写字母 E 则在结果的数字中使用大写的 E)。注:在 AutoHotkey 1.x,使用科学计数法表示格式时必须包含小数点;例如 1.0e1
是正确的但 1e1
则错误。
总宽度 通常为 0 表示结果不需要使用空格或零填充. 如果总宽度大于实际宽度, 则结果中将使用空格或零填充 (请参阅 备注) 到指定宽度.
小数位数 为要显示的小数部分的位数 (超出部分将进行四舍五入). 如果为空或零, 则结果中不会显示小数点和小数部分, 即浮点运算的结果会显示为整数而不是浮点数. 默认的小数位数为 6.
填充: 如果 总宽度 大于实际宽度, 那么结果中将在左边填充空格; 即每个数字是右对齐的. 要让数字左对齐, 请在 总宽度 前加上负号. 要使用零而不是空格填充,请在总宽度前加上零(例如 06.2
)。
HexValue .= ""
这样的操作,这个操作中把空字符串附加到当前保存在 HexValue 的数字上。如果在脚本的任意位置使用了慢速模式 "Integer" 或 "Float", 即使 SetFormat 命令所在的这行从未执行, 在脚本开始运行时都会禁用整数或浮点数的缓冲.
在 v1.0.48+,浮点变量的内部精确度大约为 15 位,除非在脚本的某个位置使用了 SetFormat Float
(即慢速模式)。此时, 浮点数保存的精度由 小数位数 决定 (就像 1.0.48 之前的版本那样). 换句话说,一旦浮点运算的结果保存到变量中,多余的精度会丢失并且无法通过再进行像 SetFormat, Float, 0.15
这样的计算进行还原。为了防止精度丢失,请避免在脚本中使用 SetFormat Float
,或者使用 SetFormat FloatFast
代替。
不论当前有效的是快速模式还是慢速模式, 每当浮点结果和变量需要显示或转换到字符串文本 (例如 MsgBox 或 FileAppend) 时, 它们都会被四舍五入到 小数位数. 要查看完整的精度,请使用类似 SetFormat, FloatFast, 0.15
这样的命令。
要把浮点数转换成整数,请使用 Var:=Round(Var)
、Var:=Floor(Var)
或 Var:=Ceil(Var)
。要把整数转换成浮点数,给它加上 0.0(例如 Var+=0.0
)或使用像 MyFloat:=Round(MyInteger, 1)
这样的命令。
内置变量 A_FormatFloat 包含了当前的浮点格式(例如 0.6
)。
整数的运算结果一般显示为十进制, 而不是十六进制. 要切换为十六进制,请使用 SetFormat, IntegerFast, Hex
。这种方法还可以用来把整数从十进制转换为十六进制(反之亦然),如同此页面底部示例演示的那样。
在脚本中指定为原义的整数可以写为十六进制或十进制. 十六进制整数必须以前缀 0x 开头(例如 0xA9
)。它们可以用在任何需要数字的地方. 例如,Sleep 0xFF
相当于 Sleep 255
,不论当前 SetFormat 中整数格式的设置如何。
AutoHotkey 支持 64 位有符号整数, 其范围从 -9223372036854775808 (-0x8000000000000000) 到 9223372036854775807 (0x7FFFFFFFFFFFFFFF).
内置变量 A_FormatInteger 包含了当前的整数格式 (H 或 D).
如果脚本中没有使用 SetFormat,则整数默认为十进制格式,而浮点数默认为总宽度.小数位数
= 0.6
。每个新运行的线程(例如热键、自定义菜单项或定时子程序)都会以这些默认设置开始;但可以在脚本的自动执行段(脚本的顶部)使用 SetFormat 来改变这些默认值。
旧式风格的赋值(如 x=%y%
)会忽略任何前导或尾随的空格(即填充的)。要避免这种情况,请使用 AutoTrim 或冒号等号运算符(例如 x:=y
)。
使用 "if var is number/integer/float" 可以判断一个变量的内容是否为数值.
要对整数填充零或空格时可以不需要进行浮点运算, 请参照此例:
Var := " " . Var ; 引号内包含 10 个空格. 要用零填充, 请把其中的空格替换为零. StringRight, Var, Var, 10 ; 这里用足够的空格填充 Var 中数字使其总宽度为 10 个字符. Var := SubStr(" " . Var, -9) ; 这里一行实现上面两行的操作.
表达式赋值 (:=), EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, if var is type
Var = 11.333333 SetFormat, float, 6.2 Var -= 1 ; 因为总宽度为 6, 所以赋值 Var 为带一个前导空格的 10.33. SetFormat, float, 0.2 Var += 1 ; 赋值 Var 为不带前导空格的 11.33. SetFormat, float, 06.0 Var += 0 ; 赋值 Var 为 000011 ; 把十进制整数转换为十六进制: SetFormat, IntegerFast, hex Var += 0 ; 赋值 Var (原来的内容为 11) 为 0xb. Var .= "" ; 这行是必须的, 因为在快速模式. SetFormat, IntegerFast, d