根据格式字串的定义, 将若干个输入值格式化为指定格式.
String := Format(FormatStr , Values...)
格式化字串以文本及占位符的形式构成 {Index:Format}
.
Index 整数. 表示待格式化的输入值的序号, 1 表示第一个值.
Format 可选的格式限定符, 请参考以下说明.
若省略掉 index 则会对待处理序列中的下一个输入值进行格式化(即使该序列已被使用过). 例如, "{2:i} {:i}"
会将第二个和第三个输入值格式化成十进制整数并以空格分隔开来. 在省略掉 Index 时, Format 前仍必须是 :
. 指定一对空的大括号将按默认格式处理下一个输入值: {}
{{}
和 {}}
的形式可以将字符串中的大括号原样包含进来, 其他任何无用的占位符则会被原样包含到结果中去
不允许在大括号中包含空格符, 除非是作为标志所用
表示待格式化的输入值, 且后续会被插入到目标字符串中. 每个值就是一个独立的参数, 第一个值的索引是 1.
使用可变函数调用来传递一个数组
arr := [13, 240] MsgBox % Format("{2:x}{1:02x}", arr*)
每个格式说明符可按序包含如下几组类型(不含空格):
Flags Width .Precision ULT Type
Flags 决定输出字符的对齐方式和前缀: -
+
0
#
Width: 整数. 控制格式化后的值的最小宽度. 对于字符, 默认的是右对齐并以空格填充, 可使用 -
(左对齐) 和 0
(前缀 0) 等标志加以改变
.Precision: 整数. 控制字符串, 整数位数或有效数字的最大位数; 输出结果由所定义的输出类型决定, 输出类型(Type) 的最前面必须是小数点, 指定精度会改变输出值进行截断(四舍五入) 或补全的方式. 输出类型以及每种类型如何受到精度值的影响如下(参见下表, 以了解不同输出类型的解释):
f
, e
, E
: Precision 指定跟在小数点后面的数字位数, 默认是 6 位g
, G
: Precision 指定有符号数字的最大位数. 默认是 6 位.s
: Precision 指定可被打印的最大字符数, 超过数量的字符将不被打印.d
, i
, u
, x
, X
, o
), 精度 的作用类似于带前导 0
的 Width, 默认宽度是 1.ULT [v1.1.20+]: 为字串值指定一个形式转换 -- Upper, Lower 或 Title(大写, 小写, 首字母大写(标题)), ULT 仅适用 s
类型, 例如 {:U}
或 {:.20Ts}
, L T 也可以写成小写的 l
t
, 但小写的 u
, 则是为无符号整数保留的.
Type: 一个指示输入值将被如何解析的字符, 如果省略则默认是 s
.
标志 | 含义 |
---|---|
- |
在给定位宽下使结果左对齐(不足位宽的右侧部分补以空格). 例如, 如果省略, 结果将在给定的位宽内右对齐. |
+ |
如果输出值是带符号的类型, 则使用符号(+ 或 -) 作为前缀. 例如, 如果省略, 仅在输出值是负数时显示符号(-). |
0 |
如果 width 以 0 为前缀, 前导 0 将被添加直至最小宽度. 例如, 如果省略, 不填充. |
(空格) |
当输出值是有符号数且为正数时, 以空格为前缀来修饰. 如果空格 如果省略, 无空格. |
# |
当 # 和 o, x 或 X 格式一起使用时, 此标志使用 当 # 和 e, E, f, a, A 格式一起使用时, 此标志强制使输出值包含小数点. 例如, 当 # 和 g 或 G 一起使用时, 此标志强制使输出值包含小数点并保留末尾的 0. 当 # 和 c, d, i, u 或 s 格式一起使用时会被忽略. |
类型字符 | 参数类型 | 输出格式 |
---|---|---|
d 或 i |
整数型 | 有符号整数. 例如, Format("{:d}", 1.23) 返回 1 . |
u |
整数型 | 无符号整数 |
x 或 X |
整数型 | 无符号十六进制整数; 由 x 的大小写形式决定输出值是 "abcdef" 还是 "ABCDEF" 的形式, 仅当使用了 # 标志时, 0x 前缀才会包含到输出值中, 如 {:#x} . 为了和使用 SetFormat 格式化的十六进制数保持兼容, 建议使用 0x{:x} 或类似的格式. 例如, Format("{:X}", 255) 返回 FF . |
o |
整数型 | 无符号八进制整数. 例如, Format("{:o}", 255) 返回 377 . |
f |
浮点型 | 形如 [ - ]dddd.dddd 的有符号数值, dddd 可以是一位或多位数字. 小数点前的数字位数取决于整数部分的大小, 小数点后的数字位数取决于需求的精度. 例如, Format("{:.2f}", 1) 返回 1.00 . |
e |
浮点型 | 形如 [ - ]d.dddd e [符号]dd[d] 的有符号值, 这里的 d 是一位数字, dddd 是一位或多位数字, dd[d] 是两或三位数字, 取决于输出格式的定义和指数的大小, 这里的 符号 是 + 或 -. 例如, Format("{:e}", 255) 返回 2.550000e+002 . |
E |
浮点型 | 同 e 格式, 但结果中指数部分显示的是 E 而不是 e |
g |
浮点型 | 以 f 或 e 格式显示的有符号值, 但 g 格式的输出结果会更加紧凑, 当输出值的指数小于 -4 或大于等于规定的 精度 时会以 e 格式进行输出; 输出值末尾的 0 将被截断, 小数点仅在小数点后存在一位以上数字时才会出现. |
G |
浮点型 | 同 g 格式, 但输出结果中的 e 将被 E 代替(如果按 e 格式进行输出的话). |
a |
浮点型 | 形如 [?]0x h.hhhh p±dd 的双精度浮点有符号十六进制值, h.hhhh 的小数部分是十六进制数值(小写), dd 是代表指数的一位以上数字, 此时的精度代表小数点后面的数字位数, ? 表示输出值的符号, 仅显示负号(-). 例如, Format("{:a}", 255) 返回 0x1.fe0000p+7 . |
A |
浮点型 | 同 a 格式, 不同的是输出结果中的 p 会以 P 代替, 同时 dddd 部分会变成大写的形式. |
p |
整数型 | 将参数显示为十六进制的内存地址. 例如, Format("{:p}", 255) 返回 000000FF . |
s |
字串型 | 输出字符串. 如果输入值是数值, 该输入值会在 Width 和 Precision 生效前按照脚本的当前数值格式自动转换为字符串. |
c |
字符编码 | 按照编码顺序输出一个单字符, 类似于 Chr(n) . 如果输入值不在预期范围内将被回转. |
不同于 printf, Format() 不支持大小指示. 所有的整数型和浮点型输入值都是 64-bit(64 位).
; 简单替换 s .= Format("{2}, {1}!`r`n", "World", "Hello") ; 填充空格 s .= Format("|{:-10}|`r`n|{:10}|`r`n", "Left", "Right") ; 十六进制 s .= Format("{1:#x} {2:X} 0x{3:x}`r`n", 3735928559, 195948557, 0) ; 浮点数 s .= Format("{1:0.3f} {1:.10f}", 4*ATan(1)) ListVars ; 用 AutoHotkey 的主窗口显示等宽文本. WinWaitActive ahk_class AutoHotkey ControlSetText Edit1, %s% WinWaitClose