设置数学运算得到的整数和浮点数的格式.
过时的: 不推荐在新脚本中使用此命令. 请使用 Format 函数代替.
SetFormat, NumberType, Format
必须为 IntegerFast, FloatFast, Integer 或 Float(其中两种快速模式需要 [v1.0.48+]; 请参阅下面的 Fast vs. Slow).
当 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 表示结果不需要使用空格或零填充. 如果总宽度大于实际宽度, 则结果中将使用空格或零填充(请参阅下面的 Floating Point Forma) 到指定宽度.
小数位数 为要显示的小数部分的位数(超出部分将进行四舍五入). 如果为空或零, 则结果中不会显示小数点和小数部分, 即浮点运算的结果会显示为整数而不是浮点数. 默认的小数位数为 6.
填充: 如果 总宽度 大于实际宽度, 那么结果中将在左边填充空格; 即每个数字是右对齐的. 要让数字左对齐, 请在 总宽度 前加上负号. 要使用零而不是空格填充, 请在 总宽度 前加上零(例如 06.2
).
在 [v1.0.48+] 中, 可以使用 IntegerFast 代替 Integer, 使用 FloatFast 代替 Float.
优点: 快速模式能维持变量缓存整数和浮点数的能力, 这样可以极大地加快数值密集型运算. (相反地, 慢速模式强制将所有的数值结果立即转换并保存为字符串.)
缺点: 保存数字到变量时, 快速模式延迟 SetFormat 的效果到脚本实际需要此变量的文本/字符串版本时(例如要在消息框显示变量的内容). 由于不同的 SetFormat 可能同时生效(例如更多或更少的小数位), 这可能导致不可预期的结果. 要让当前的快速模式立即生效, 请执行像 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 [not] Type 可以判断一个变量的内容是否为数值.
要对整数填充零或空格时可以不需要进行浮点运算, 请参照此例:
Var := " " . Var ; 引号内包含 10 个空格. 要用零填充, 请把其中的空格替换为零. Var := SubStr(Var, -9) ; 这里用足够的空格填充 Var 中数字使其总宽度为 10 个字符. Var := SubStr(" " . Var, -9) ; 这里一行实现上面两行的操作.
Format(), 表达式赋值(:=), 缓存, EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, If Var is [not] 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