基 础 函 数 参 考


StringFormat

返回格式化字符串(类似 C 语言的 sprintf() 函数).

StringFormat ( "格式控制", 变量1 [, ... 变量32] )

参 数

格式控制 使用的格式和标志 (见备注).
变量1...变量32 最多 32 个依照 "格式控制" 输出的变量.

返 回 值

根据"格式控制"参数指定的格式返回格式化字符串.

备 注

为避免缓冲器溢出,每个 " 变量 " 被限制为 65535个字符.
转义字符可以包含在 "格式控制" 参数中, 例如: \n (@LF), \r (@CR), \t (@TAB].
如果希望有一个 "\", 需要使用: \\, 同样一个 "%" 应使用: %%.

"格式控制": %[flags] [width] [.precision] type ( %[标志] [宽度] [.精度] 类型 )

        Width(宽度)约定

"格式控制"的第二可选字段是[width][宽度]. 参数是一个非负十进制整数, 控制打印字符的最小数目.
如果输出字符数小于指定的宽度, 空白符被加到输出值的左边或右边[根据标志决定], 使其达到最小宽度. 如果宽度前缀为 0,
则添加 0, 直到最小宽度为止 (不使用左对齐时).

宽度约定不会引起输出值被截断.
如果字符的输出数比指定的宽度大, 或宽度没有设定, 所有字符值都将被打印 (依照精度约定).

        Type(类型)描述


类型 变量类型 输出格式
d, i 整数 带符号十进制整数.
o 整数 无符号八进制整数.
u 整数 无符号十进制整数.
x 整数 无符号十六进制整数, 使用小写 "abcdef".
X 整数 无符号十六进制整数, 使用大写 "ABCDEF".
e 浮点 带符号数值, 形如: [ - ]d.dddd e [sign]ddd,
其中 d 是一个单一的十进制数字,
dddd 是一或多位小数,
ddd 是精确的三位小数,
sign 为 + 或 -.
E 浮点 等同于 e 格式, 只是改用 E 而非 e 作为指数.
f 浮点 带符号数值, 形如: [ - ]dddd.dddd,
其中 dddd 是一个或多个十进制数字.
该数字小数点前的数位取决于数字的大小, 小数点后的数位取决于所要求的精度.
g 浮点 fe 格式打印带符号值, 无论哪一个给定值和精度都是以紧凑格式打印.
e 格式用在值指数小于 -4 或大于等于精度参数时, 尾随零被切断,
而且十进制小数点只在有一或较多数字跟随时出现.
G 浮点 等同于 g 格式, 但使用 E, 而不是 e 作为指数 (如适用).
s 字符串 字符串.

        Flag(标志)约定


标志 意义 默认值
- 在给定字段宽度内左对齐结果. 右对齐.
+ 如果输出值是带符号类型, 输出值前缀使用符号(+ 或 -). 仅当负值时出现负号 (-).
0 如果宽度以 0 开头, 则添加 0 到最小宽度.
如果 0 和 - 出现, 0 被忽略.
如果 0 与整数格式(i, u, x, X, o, d)一起指定, 0 被忽略.
不添加 0.
Blank 如果输出值为带符号的正值, 则输出数值前缀用一个空白符;
如果空白符和 + 标志同时出现, 空白符被忽略.
不出现空白符.
# 使用 o, x, 或 X 格式时,
标志 # 表示任何非零输出值前缀分别使用 0, 0x, 或 0X.
不出现空白符.
# 使用 e, E, or f 格式时,
标志 # 强制输出值在所有情况下都包含一个十进制小数点.
只在有数字跟随时出现十进制小数点.
# 使用 gG 格式时, 标志 # 强制输出值在所有情况下都包含一个十进制小数点,
并且避免截断尾随零. 使用 c, d, i, u, 或 s 格式时忽略.
只在有数字跟随时, 十进制小数点才会出现. 并截断尾随零.

        Precision(精度)约定

"格式控制"的第三可选字段是[.precision][.精度].
它指定一个非负十进制整数, 之前有一个句点 (.), 指定要打印的字符数, 小数位数, 或有效位数(见下表).
不同于宽度约定, 精度约定能引起输出值或浮点值的四舍五入结果被截断.
如果精度被指定为 0, 且要转换的值也是 0, 结果是没有任何字符输出. 像下面语句:

StringFormat( "%.0d", 0 ); /* 没有字符返回 */

    精度值如何影响类型


类型 意义 默认值
d, i, u, o, x, X "精度"指定打印的最小位数.
如果位数变量小于精度值, 输出值左边由 0 填补. 当位数超过精度, 不截断输出值.
默认精度为 1.
e, E "精度"指定十进制小数点后的打印位数. 最后打印值将四舍五入. 默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.
f "精度"指定小数点后的位数. 如果出现十进制小数点,
则在它之前至少应出现一位数字. 该值将四舍五入为适当的数字.
默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.
g, G "精度"指定有效打印位数. 打印六位有效数字, 任何尾随零截断.
s "精度"指定打印的最大字符数. 超过精度的字符不打印. 打印字符, 直到遇到空字符为止.

相 关 函 数

None.

函 数 示 例


Local $n = 43951789;
Local $u = -43951789;

; 注意: 双 %%, 表示要打印一个 '%' 符号
printf("%%d = '%d'\n", $n);             '43951789'         标准整数表示法
printf("%%e = '%e'\n", $n);             '4.395179e+007'    科学记数法
printf("%%u = '%u'\n", $n);             '43951789'         无符号正整数
printf("%%u <0 = '%u'\n", $u);          '4251015507'       无符号正整数
printf("%%f = '%f'\n", $n);             '43951789.000000'  浮点小数
printf("%%.2f = '%.2f'\n", $n);         '43951789.00'      浮点数,十进制小数点后2位数字
printf("%%o = '%o'\n", $n);             '247523255'        八进制数
printf("%%s = '%s'\n", $n);             '43951789'         表示字符串
printf("%%x = '%x'\n", $n);             '29ea6ad'          十六进数表示法 (小写)
printf("%%X = '%X'\n", $n);             '29EA6AD'          十六进数表示法 (大写)

printf("%%+d = '%+d'\n", $n);           '+43951789'        正整数
printf("%%+d <0= '%+d'\n", $u);         '-43951789'        负整数


$s = 'monkey';
$t = 'many monkeys';

printf("%%s = [%s]\n",      $s);        [monkey]           字符串标准输出
printf("%%10s = [%10s]\n",    $s);      [    monkey]       右对齐,有空格
printf("%%-10s = [%-10s]\n",   $s);     [monkey    ]       左对齐,有空格
printf("%%010s = [%010s]\n",   $s);     [0000monkey]       字串前填充 0
printf("%%10.10s = [%10.10s]\n", $t);   [many monke]       左对齐 保留10个字符,其余截断

printf("%04d-%02d-%02d\n", 2008, 4, 1);

Func Printf($format, $var1, $var2 = -1, $var3 = -1)
    If $var2 = -1 Then
        ConsoleWrite(StringFormat($format, $var1))
    Else
        ConsoleWrite(StringFormat($format, $var1, $var2, $var3))
    EndIf
EndFunc   ;==>Printf

provider with jb51.net (unicode)