<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>Format() <span class="ver">[v1.1.17+]</span></h1> <p>根据格式字串的定义, 将若干个输入值格式化为指定格式.</p> <pre class="Syntax">String := <span class="func">Format</span>(FormatStr <span class="optional">, Values...</span>)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>FormatStr</dt> <dd> <p>格式化字串以文本及占位符的形式构成 <code>{<i>Index</i>:<i><a href="#FormatSpec">Format</a></i>}</code>.</p> <p><em>Index</em> 整数. 表示待格式化的输入值的序号, 1 表示第一个值.</p> <p><em>Format</em> 可选的格式限定符, 请参考以下说明.</p> <p>若省略掉 index 则会对待处理序列中的下一个输入值进行格式化(即使该序列已被使用过). 例如, <code>"{2:i} {:i}"</code> 会将第二个和第三个输入值格式化成十进制整数并以空格分隔开来. 在省略掉 <em>Index</em> 时, <em>Format</em> 前仍必须是 <code>:</code>. 指定一对空的大括号将按默认格式处理下一个输入值: <code>{}</code></p> <p><code>{{}</code> 和 <code>{}}</code> 的形式可以将字符串中的大括号原样包含进来, 其他任何无用的占位符则会被原样包含到结果中去</p> <p>不允许在大括号中包含空格符, 除非是作为标志所用</p> </dd> <dt>Values</dt> <dd> <p>表示待格式化的输入值, 且后续会被插入到目标字符串中. 每个值就是一个独立的参数, 第一个值的索引是 1.</p> <p>使用<a href="../Functions.htm#VariadicCall">可变函数调用</a>来传递一个数组</p> <pre>arr := [13, 240] MsgBox % Format("{2:x}{1:02x}", arr*)</pre> </dd> </dl> <h2 id="FormatSpec">Format Specifiers(格式说明符)</h2> <p>每个格式说明符可按序包含如下几组类型(不含空格):</p> <pre class="Syntax">Flags Width .Precision ULT Type</pre> <p><strong>Flags</strong></a> : 从下面的<a href="#Flags">标志表</a>选择零个或多个标志来影响输出的对齐和前缀.</p> <p><strong>Width</strong>: 整数. 控制格式化后的值的最小宽度. 对于字符, 默认的是右对齐并以空格填充, 可使用 <code>-</code>(左对齐) 和 <code class="no-highlight">0</code>(前缀 0) 等标志加以改变</p> <p><strong>.Precision</strong>: 整数. 控制字符串, 整数位数或有效数字的最大位数; 输出结果由所定义的输出类型决定, 输出类型(Type) 的最前面必须是小数点, 指定精度会改变输出值进行截断(四舍五入) 或补全的方式. 输出类型以及每种类型如何受到精度值的影响如下(参见下表, 以了解不同输出类型的解释):</p> <ul> <li><code>f</code>, <code>e</code>, <code>E</code>: <em>Precision</em> 指定跟在小数点后面的数字位数, 默认是 6 位</li> <li><code>g</code>, <code>G</code>: <em>Precision</em> 指定有符号数字的最大位数. 默认是 6 位.</li> <li><code>s</code>: <em>Precision</em> 指定可被打印的最大字符数, 超过数量的字符将不被打印.</li> <li>对于整数型(<code>d</code>, <code>i</code>, <code>u</code>, <code>x</code>, <code>X</code>, <code>o</code>), <em>精度</em> 的作用类似于带前导 <code class="no-highlight">0</code> 的 <em>Width</em>, 默认宽度是 1.</li> </ul> <p id="ULT"><b>ULT</b> <span class="ver">[v1.1.20+]</span>: 为字串值指定一个形式转换 -- <b>U</b>pper, <b>L</b>ower 或 <b>T</b>itle(大写, 小写, 首字母大写(标题)), ULT 仅适用 <code>s</code> 类型, 例如 <code>{:U}</code> 或 <code>{:.20Ts}</code>, L T 也可以写成小写的 <code>l</code> <code>t</code>, 但小写的 <code>u</code>, 则是为无符号整数保留的.</p> <p><strong>Type</strong></a>: 下面<a href="#Types">类型表格</a>中一个指示输入值将被如何解析的字符, 如果省略则默认是 <code>s</code>.</p> <h2 id="Flags">Flags</h2> <table class="info"> <tr><th style="min-width:5em">标志</th><th>含义</th></tr> <tr> <td><code>-</code></td> <td> <p>在给定位宽下使结果左对齐(不足位宽的右侧部分补以空格). 例如, <code>Format("{:-10}", 1)</code> 返回 <code class="no-highlight" style="white-space: pre">1 </code>.</p> <p>如果省略, 结果将在给定的位宽内右对齐.</p> </td> </tr> <tr> <td><code>+</code></td> <td> <p>如果输出值是带符号的类型, 则使用符号(+ 或 -) 作为前缀. 例如, <code>Format("{:+d}", 1)</code> 返回 <code class="no-highlight">+1</code>.</p> <p>如果省略, 仅在输出值是负数时显示符号(-).</p> </td> </tr> <tr> <td><code class="no-highlight">0</code></td> <td> <p>如果 <em>width</em> 以 0 为前缀, 前导 0 将被添加直至最小宽度. 例如, <code>Format("{:010}", 1)</code> 返回 <code class="no-highlight">0000000001</code>. 若同时使用 <code class="no-highlight">0</code> 和 <code>-</code>, 则前者将被忽略. 如果 0 被指定为整数格式(i, u, x, X, o, d) 且同时带有精度指示 - 例如, <code class="no-highlight">{:04.d}</code> - 此时的 0 会被忽略.</p> <p>如果省略, 不填充.</p> </td> </tr> <tr> <td><code>&nbsp;</code>(空格)</td> <td> <p>当输出值是有符号数且为正数时, 以空格为前缀来修饰. 如果空格 <code>&nbsp;</code> 和 <code>+</code> 同时出现时, 空格将被忽略. 例如, <code>Format("{:&nbsp;10}", 1)</code> 返回 <code class="no-highlight" style="white-space: pre"> 1</code>.</p> <p>如果省略, 无空格.</p> </td> </tr> <tr> <td><code>#</code></td> <td> <p>当 # 和 o, x 或 X 格式一起使用时, 此标志使用 <code class="no-highlight">0</code>, <code class="no-highlight">0x</code> 或 <code class="no-highlight">0X</code> 的形式分别修饰任意非零的输出值. 例如, <code>Format("{:#x}", 1)</code> 返回 <code class="no-highlight">0x1</code>.</p> <p>当 # 和 e, E, f, a, A 格式一起使用时, 此标志强制使输出值包含小数点. 例如, <code>Format("{:#.0f}", 1)</code> 返回 <code class="no-highlight">1.</code>.</p> <p>当 # 和 g 或 G 一起使用时, 此标志强制使输出值包含小数点并保留末尾的 0.</p> <p>当 # 和 c, d, i, u 或 s 格式一起使用时会被忽略.</p> </td> </tr> </table> <h2 id="Types">Types</h2> <table class="info"> <tr><th abbr="Type Char" style="min-width:5em">类型字符</th><th style="min-width:7em">参数类型</th><th abbr="Out format">输出格式</th></tr> <tr> <td><code>d</code> 或 <code>i</code></td> <td>整数型</td> <td>有符号整数. 例如, <code>Format("{:d}", 1.23)</code> 返回 <code class="no-highlight">1</code>.</td> </tr> <tr> <td><code>u</code></td> <td>整数型</td> <td>无符号整数</td> </tr> <tr> <td><code>x</code> 或 <code>X</code></td> <td>整数型</td> <td>无符号十六进制整数; 由 <code>x</code> 的大小写形式决定输出值是 "abcdef" 还是 "ABCDEF" 的形式, 仅当使用了 <code>#</code> 标志时, <code class="no-highlight">0x</code> 前缀才会包含到输出值中, 如 <code>{:#x}</code>. 为了和使用 <a href="SetFormat.htm">SetFormat</a> 格式化的十六进制数保持兼容, 建议使用 <code class="no-highlight">0x{:x}</code> 或类似的格式. 例如, <code>Format("{:X}", 255)</code> 返回 <code>FF</code>.</td> </tr> <tr> <td><code>o</code></td> <td>整数型</td> <td>无符号八进制整数. 例如, <code>Format("{:o}", 255)</code> 返回 <code class="no-highlight">377</code>.</td> </tr> <tr> <td><code>f</code></td> <td>浮点型</td> <td>形如 [ - ]<em>dddd</em>.<em>dddd</em> 的有符号数值, <em>dddd</em> 可以是一位或多位数字. 小数点前的数字位数取决于整数部分的大小, 小数点后的数字位数取决于需求的精度. 例如, <code>Format("{:.2f}", 1)</code> 返回 <code class="no-highlight">1.00</code>.</td> </tr> <tr> <td><code>e</code></td> <td>浮点型</td> <td>形如 [ - ]<em>d.dddd</em> e [<em>符号</em>]<em>dd[d]</em> 的有符号值, 这里的 <em>d</em> 是一位数字, <em>dddd</em> 是一位或多位数字, <em>dd[d]</em> 是两或三位数字, 取决于输出格式的定义和指数的大小, 这里的 <em>符号</em> 是 + 或 -. 例如, <code>Format("{:e}", 255)</code> 返回 <code class="no-highlight">2.550000e+002</code>.</td> </tr> <tr> <td><code>E</code></td> <td>浮点型</td> <td>同 <code>e</code> 格式, 但结果中指数部分显示的是 E 而不是 e </td> </tr> <tr> <td><code>g</code></td> <td>浮点型</td> <td>以 <code>f</code> 或 <code>e</code> 格式显示的有符号值, 但 <code>g</code> 格式的输出结果会更加紧凑, 当输出值的指数小于 -4 或大于等于规定的 <em>精度</em> 时会以 <code>e</code> 格式进行输出; 输出值末尾的 0 将被截断, 小数点仅在小数点后存在一位以上数字时才会出现.</td> </tr> <tr> <td><code>G</code></td> <td>浮点型</td> <td>同 <code>g</code> 格式, 但输出结果中的 e 将被 E 代替(如果按 e 格式进行输出的话).</td> </tr> <tr> <td><code>a</code></td> <td>浮点型</td> <td>形如 [?]0x <em>h.hhhh</em> <strong>p</strong>&plusmn;<em>dd</em> 的双精度浮点有符号十六进制值, <em>h.hhhh</em> 的小数部分是十六进制数值(小写), <em>dd</em> 是代表指数的一位以上数字, 此时的精度代表小数点后面的数字位数, <em>?</em> 表示输出值的符号, 仅显示负号(-). 例如, <code>Format("{:a}", 255)</code> 返回 <code class="no-highlight">0x1.fe0000p+7</code>.</td> </tr> <tr> <td><code>A</code></td> <td>浮点型</td> <td>同 <code>a</code> 格式, 不同的是输出结果中的 p 会以 P 代替, 同时 dddd 部分会变成大写的形式.</td> </tr> <tr> <td><code>p</code></td> <td>整数型</td> <td>将参数显示为十六进制的内存地址. 例如, <code>Format("{:p}", 255)</code> 返回 <code class="no-highlight">000000FF</code>.</td> </tr> <tr> <td><code>s</code></td> <td>字串型</td> <td>输出字符串. 如果输入值是数值, 该输入值会在 <em>Width</em> 和 <em>Precision</em> 生效前按照脚本的<a href="SetFormat.htm">当前数值格式</a>自动转换为字符串.</td> </tr> <tr> <td><code>c</code></td> <td>字符编码</td> <td>按照编码顺序输出一个单字符, 类似于 <code><a href="Chr.htm">Chr</a>(n)</code>. 如果输入值不在预期范围内将被回转.</td> </tr> </table> <h2 id="Remarks">备注</h2> <p>不同于 <a href="httpS://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions">printf</a>, Format() 不支持大小指示. 所有的整数型和浮点型输入值都是 64-bit(64 位). </p> <h2 id="Related">相关</h2> <p><a href="SetFormat.htm">SetFormat</a>, <a href="FormatTime.htm">FormatTime</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> 演示不同的用法.</p> <pre> <em>; 简单替换</em> s .= Format("{2}, {1}!`r`n", "World", "Hello") <em>; 填充空格</em> s .= Format("|{:-10}|`r`n|{:10}|`r`n", "Left", "Right") <em>; 十六进制</em> s .= Format("{1:#x} {2:X} 0x{3:x}`r`n", 3735928559, 195948557, 0) <em>; 浮点数</em> s .= Format("{1:0.3f} {1:.10f}", 4*ATan(1)) ListVars <em>; 用 AutoHotkey 的主窗口显示等宽文本.</em> WinWaitActive ahk_class AutoHotkey ControlSetText Edit1, %s% WinWaitClose </pre> </div> <a href="https://dftg.net">dftg</a><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d5a9c4fcb9b6482fa53ce820d892f969"}'></script><!-- Cloudflare Pages Analytics --><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"93812a98fa75eaf5","version":"2025.4.0-1-g37f21b1","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"51750bb5dc4f40cc91a5ec55c63bbc01","b":1}' crossorigin="anonymous"></script> </body> </html>