sprintf() 使用手记

用法: string sprintf(string format, mixed [args]…);
传回值:字串
函式种类:资料处理
内容说明:本函式用来将字串格式化。参数 format 是转换的格式,以百分比符号 % 开始到转换字符为止。

在转换的格式间依序包括了:

  1. 处理字符方向。-负号时表时从后向前处理。
  2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
  3. 字符宽度。注意:这里是指字符的最小总宽度。
  4. 精确度。指在小数点后的浮点数位数。

型态,见下表:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
转换字符
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
% 印出百分比符号,不转换。
b 整数转成二进位。
c 整数转成对应的 ASCII 字元。
d 整数转成十进位。
f 倍精确度数字转成浮点数。
o 整数转成八进位。
s 整数转成字串。
x 整数转成小写十六进位。
X 整数转成大写十六进位。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

使用范例

1
2
3
4
5
6
7
8
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// 此时变数 $money 值为 "123.1";
$formatted = sprintf ("%01.2f", $money);
// 此时变数 $ formatted 值为 "123.10"
?>

这个 %01.2f 是什么意思呢?

首先,这个 % 符号是开始的意思,他写在最前面表示指定格式要开始了,也就是 “起始字符”,直到出现“转换字符”为止,就算格式终止。

然后跟在 % 符号后面的是0,这个零表示 “填空字元”,如果位置空着就用0来填满。
在0后面的是1,这个1是规定最终字符串的输出长度。

到目前,在 %01 后面的 .2 (点2) 就很好理解了,它的意思是规定小数点后的数字必需占2位。如果这时候,$money 的值为 1.234,则 $formatted 的值将为 1.23。
为什么 4 不见了呢? 因为,在小数点后面 按照上面的规定,必需且仅能占2位。可是 $money 的值中,小数点占了3位,所以,4被去掉了,只剩下23。

最后,以 f “转换字符”结尾,其他转换字符请自行参考上面的转换字符列表。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

1
2
3
4
5
6
7
<?php
$money = 123.1
$formatted = sprintf ("%01.2f", $money); // 此时变数 $ formatted 值为 "123.10"
$formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"
$formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
?>
  1. %08.2f 解释:
    %开始符
    0是 “填空字元” 表示,如果长度不足时就用0来填满。
    6格式化后总长度
    2f小数位长度,即2位

  2. 第4行值为”00123.10” 解释:
    因为2f是(2位)+小数点符号(1)+前面123(3位)=6位,总长度为8位,故前面用[填空字元]0表示,即00123.10

  3. 第4行值为”-123.1000” 解释:

-号为反向操作,然后填空字元0添加在最后面了。