# SetFormat

设置数学运算得到的整数或浮点数的格式。

SetFormat, NumberType, Format

#### 参数

NumberType | 必须是 INTEGER/整数 或者 FLOAT/浮点数 。
Format | 上一个参数 NumberType 使用 INTEGER 的话，这个参数必须是表示十六进制的 HEX（可以简写为 H），或者表示十进制的 D 。十六进制的数字全部是以 0x 开头的（例如 0xFF）。 上一个参数 NumberType 使用 FLOAT 的话，这个参数的格式为 总宽度.小数位数（例如 0.6）。在 v1.0.46.11 以上的版本中，可以在后面添加字母“e”表示使用科学计数法显示结果，例如 0.6e 或者 0.6E（使用大写字母 E 的话在结果中显示的就是大写字母 E 而不是小写字母 e）。注意：在 AutoHotkey 1.x 版本中，使用科学计数法显示的时候，这个参数必须包含小数点，例如 1.0e1 是正确的，而 1e1 是错误的。 总宽度 一般使用 0 ，表示计算结果不需要使用空格或 0 来填充。如果 总宽度 大于实际宽度，将会使用空格或 0（参看下面）来填充至指定宽度。注意：总宽度 包括小数点。 小数位数 表示要显示的小数部分宽度（超出部分的四舍五入）。如果留空或使用 0 ，结果中将不会显示小数点以及小数部分，也就是说，结果会以整数的方式存储，而不是浮点数。 填充：如果 总宽度 大于实际宽度，结果中将会使用空格来填充左边缺少的宽度，也就是说，数字将会右对齐显示。要使数字左对齐显示，在 总宽度 中使用负数。要使用 0 来填充，在 总宽度 中加前缀 0（例如 06.2）。

#### 注意

如果在脚本中未使用这个命令，整数默认使用十进制，浮点数默认使用 总宽度.小数位数 = 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