StringFormat
返回格式化字符串(类似 C 语言的 sprintf() 函数).
StringFormat ( "format control", var1 [, ... var32] )
参数
format control
|
使用的格式和标志 (见备注).
|
var1...var32
|
最多 32 个依照 "format control" 输出的变量.
|
返回值
根据"format control"参数指定的格式返回格式化字符串.
备注
为避免缓冲器溢出,每个 " 变量 " 被限制为 65535个字符.
转义字符可以包含在 "format control" 参数中, 例如: \n (@LF), \r (@CR), \t (@TAB].
如果希望有一个 "\", 需要使用: \\, 同样一个 "%" 应使用: %%.
"variable format" ; %[flags] [width] [.precision] type ( %[标志] [宽度] [.精度] 类型 )
如果格式规范无效, 则特性不确定. 如果输入无效, 您可以创建处理这样的异常情况的代码, 并终止程序.
Width(宽度)约定
"format control" 的第二可选字段是[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
|
浮点
|
以 f 或 e 格式打印带符号值, 无论哪一个给定值和精度都是以紧凑格式打印.
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 格式时,
标志 # 强制输出值在所有情况下都包含一个十进制小数点.
|
只在有数字跟随时出现十进制小数点.
|
#
|
使用 g 或 G 格式时, 标志 # 强制输出值在所有情况下都包含一个十进制小数点,并且避免截断尾随零.
使用 d, i, u, 或 s 格式时忽略. 只在有数字跟随时, 十进制小数点才会出现. 并截断尾随零.
|
只在有数字跟随是出现十进制小数点.
截断尾随零
|
Precision(精度)约定
"format control" 的第三可选字段是[.precision][.精度].
它指定一个非负十进制整数, 之前有一个句点 (.), 指定要打印的字符数, 小数位数, 或有效位数(见下表).
不同于宽度约定, 精度约定能引起输出值或浮点值的四舍五入结果被截断.
如果精度被指定为 0, 且要转换的值也是 0, 结果是没有任何字符输出. 像下面语句:
StringFormat( "%.0d", 0 ); /* 没有字符返回 */
精度值如何影响类型
类型
|
意义
|
默认值
|
d, i, u, o, x, X
|
"精度"指定打印的最小位数.
如果位数变量小于精度值, 输出值左边由 0 填补. 当位数超过精度, 不截断输出值.
|
默认精度为 1.
|
e, E
|
"精度"指定十进制小数点后的打印位数. 最后打印值将四舍五入.
|
默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.
|
f
|
"精度"指定小数点后的位数. 如果出现十进制小数点,
则在它之前至少应出现一位数字. 该值将四舍五入为适当的数字.
|
默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.
|
g, G
|
"精度"指定有效打印位数.
|
打印六位有效数字, 任何尾随零截断.
|
s
|
"精度"指定打印的最大字符数. 超过精度的字符不打印.
|
打印字符, 直到遇到空字符为止.
|
函数示例
Example()
Func Example()
Local $iInt_Unsigned = 43951789
Local $iInt_Negative = -43951789
ConsoleWrite(@CRLF & "Numeric Formats" & @CRLF)
PrintFormat($iInt_Unsigned, "%d", "standard positive integer with no sign", 1) ; 43951789
PrintFormat($iInt_Negative, "%d", "standard negative integer with sign", 1) ; -43951789
PrintFormat($iInt_Unsigned, "%i", "standard integer", 1) ; 43951789
PrintFormat($iInt_Unsigned, "%09i", "9 digits with leading zero", 1) ; 043951789
PrintFormat($iInt_Unsigned, "%e", "scientific notation") ; 4.395179e+007
PrintFormat($iInt_Unsigned, "%u", "unsigned integer with positive integer", 1) ; 43951789
PrintFormat($iInt_Negative, "%u", "unsigned integer with negative integer", 1) ; 4251015507
PrintFormat($iInt_Unsigned, "%f", "floating point") ; 43951789.000000
PrintFormat($iInt_Unsigned, "%.2f", "floating point with 2 digits after decimal point", 1) ; 43951789.00
PrintFormat($iInt_Unsigned, "%o", "octal", 1) ; 247523255
PrintFormat($iInt_Unsigned, "%s", "string", 1) ; 43951789
PrintFormat($iInt_Unsigned, "%x", "hexadecimal (lower-case)", 1) ; 29ea6ad
PrintFormat($iInt_Unsigned, "%X", "hexadecimal (upper-case)", 1) ; 29EA6AD
PrintFormat($iInt_Unsigned, "%+d", "sign specifier on a positive integer", 1) ; +43951789
PrintFormat($iInt_Negative, "%+d", "sign specifier on a negative integer", 1) ; -43951789
Local $sString = "string"
Local $sString_Long = "longstring"
ConsoleWrite(@CRLF & "String Formats - [ ] used to show beginning/end of string" & @CRLF)
PrintFormat($sString, "[%s]", "standard string", 1) ; [string]
PrintFormat($sString, "[%10s]", "10 chars right justified with added spaces") ; [ string]
PrintFormat($sString, "[%-10s]", "10 chars left justified with added spaces") ; [string ]
PrintFormat($sString_Long, "[%10.8s]", "right justified but precision 8 so truncated") ; [ longer s]
PrintFormat($sString_Long, "[%-10.8s]", "left justifed but precision 8 so truncated") ; [longer s ]
PrintFormat($sString, "[%010s]", "10 chars with leading zero") ; [0000string]
ConsoleWrite(@CRLF & "Date Format - each % uses a new parameter" & @CRLF)
ConsoleWrite('"%02i\%02i\%04i" 0n (1, 9, 2013) => ' & StringFormat("%02i\%02i\%04i", 1, 9, 2013) & @CRLF & @CRLF)
EndFunc ;==>Example
Func PrintFormat($vVar, $sFormat, $sExplan, $iTab = 0)
ConsoleWrite('"' & $sFormat & '" on ' & $vVar & @TAB & ' => ' & StringFormat($sFormat, $vVar))
If $iTab Then ConsoleWrite(@TAB)
ConsoleWrite(@TAB & " ; " & $sExplan & @CRLF)
EndFunc ;==>PrintFormat
----------------------------------------
该函数可以通过命令 exect 调用
exect=$var_i=5||$var_s=StringFormat('%%08s',$var_i)||_ViewValues('$var_s') ;; 将前导零添加到数字5的示例
© Аверин Андрей для Total Commander Image Averin-And@yandex.ru
|