从C中变化过来的各种语言的printf输出格式

在c、php和shell中经常可以碰到printf的使用,特别是在php中printf的相关变种有好几个:print、printf、sprintf、vprintf、vsprintf
    在这些语言中,printf基本上都是格式化输出字符串,而且基本都是在C的基础上演变来的,下面就以php中的这些做个记录
    虽然php中有这么多,但是其中他们的差别相对来说比较小
    1、print     
              print “hello php”或 php(“hello php”)
          print 只是一个语言结构,并不是一个函数,就类似于echo;所以可以不使用() 而直接“”这样进行输出
          print和echo的区别是:print有返回值,总是返回 1。
 
    2、printf()     这是一个输出函数,所以不是和上面一样使用“”的方式使用
                函数原型:int printf ( string $format [, mixed $args [, mixed $... ]] )
    3、sprintf()     基本和printf一样,重要的是两者之间的区别
                函数原型:string sprintf ( string $format [, mixed $args [, mixed $... ]] )
          区别:
                    printf()将格式化的字符串输出到标准输出,返回输出字串的长度           
                    sprintf() 返回字符串,不会将字符串输出到浏览器上
    4、vprintf()和vsprintf()
            和上面的区别就是:它们只有两个参数:一个输出格式,一个变量数组。
            上面的printf()和sprintf()除了第一个固定的输出格式外,后面的参数变量,是根据字符串中需要输出的变量数据而对应确定的。
    现在,说说重点的输出格式(和C语言一样,并且shell也是这样),就是上面这些函数的第一个参数
        原型:
            %[padding-character][-][width][.precision]type
                黑色表示必须的,[]中的表示可选的(根据实际需求)
            % 表示转换说明开始,注意要输出%时,采用 %% 的方式
            padding-character:填充字符,默认是空格填充,如果使用 空格或0 则可以不要在前面添加“ ' ”,填充其他字符就需要在前面加上一个单引号
            -    表示对齐方式,默认左对齐,- 则说明要右对齐,
            width    长度,这个长度是:整数部分+.+小数部分 的长度就是说:3.4是3个长度,30.4是4,就是这块按字符计算。
               
            .precision 小数部分。. 表示小数点,precision表示小数点后保留几位。
        
           例如:
                 比如上面width是 10 ,padding-character是0,参数是:30.4,precision是 2,则type是f
            则输出什么?
                0000030.40

 

 1 <?php
 2     /*
 3      * create_wangxb_20150116
 4      * print 相关知识点
 5      * 
 6      */
 7     echo "*** print 只是一个语言结构,并不是一个函数,就类似于echo;所以可以不使用() 而直接“”这样进行输出 ***<br/>";
 8     $res0 = print "hello php";
 9     echo "<br/>";
10     $res1 = print("hello php");
11     echo "<br/>*********** print和echo的区别是:print有返回值,总是返回 1 ****************<br/>";
12     echo "print 返回值:res0=$res0<br/>print()返回值:res1=$res1 <br/> echo 是没有返回值的";
13     echo "<br/>*********** 定义变量:num=3.4 ***********<br/>";
14     $num = 30.4;
15     echo $num;
16     echo "<br/>";
17     $res2 = printf('this number is %.2f',$num);
18     echo "<br/>******** printf()将格式化的字符串输出到标准输出,返回输出字串的长度 ******<br/>";
19     echo "printf() 返回值 res2: $res2<br/>";
20     echo "<br/>******** sprintf() 返回字符串,不会将字符串输出到浏览器上 ******<br/>";
21     $res3 = sprintf('this number is %.2f',$num);
22     echo "sprintf() 返回值 res3(看清楚,这里我们输出的是返回值): $res3 <br/>";
23     
24     echo "<br/>比如上面width是 10 ,padding-character是0,参数是:30.4,precision是 2,则type是f<br/>";
25     printf("num is %010.2f",$num);
26 
27     echo "<br/>padding-character 是 * 时,即非空格和0时<br/>";
28     printf("num is %'*10.2f",$num);
29 
30     echo "<br/>第二项 [-] 时,即右对齐时<br/>";
31     printf("num is %'*-10.2f",$num);
32 
33     echo "<br/>第三项 width 时,即长度改变,注意要算上小数点这个字符<br/>";
34     printf("num is %'*-8.2f",$num);
35 
36     echo "<br/>第四项 precision 时,即小数点长度改变<br/>";
37     printf("num is %'*-8.3f",$num);
38 
39     echo "<br/>第五项 type 时,即改变输出类型 d<br/>";
40     printf("num is %'*-8d",$num);
41 ?>

  输出:

  

posted @ 2015-01-16 13:32  虢国技酱  阅读(536)  评论(0编辑  收藏  举报