百科狗-知识改变命运!
--

printf() - 输出格式化字符串 - php 字符串函数

梵高1年前 (2023-11-21)阅读数 31#技术干货
文章标签字符串

printf()

(PHP 4, PHP 5, PHP 7)

输出格式化字符串

说明

printf(string $format[,mixed $args[,mixed $...]]) : int

printf() - 输出格式化字符串 - php 字符串函数

依据$format格式参数产生输出。

参数

$format

$format描述信息,请参见sprintf()。

$args

返回值

返回输出字符串的长度。

参见

  • print- 输出字符串
  • sprintf()Return a formatted string
  • vprintf() 输出格式化字符串
  • sscanf()根据指定格式解析输入的字符
  • fscanf()从文件中格式化输入
  • flush()刷新输出缓冲
Be careful:
printf ("(9.95 * 100) = %d \n", (9.95 * 100));
'994'
First %d converts a float to an int by truncation.
Second floats are notorious for tiny little rounding errors.
[Editor's Note: Or just use vprintf...]
If you want to do something like  (this doesn't work) instead of  you can use this function:

Use it the following way:

and it will print:
There is a difference between good and evil
instead of writing a function to round off a float (let's call it 'x') accurately, it's much easier to add a small number to x and then truncate it...
For example: if you want to round off to the nearest integer, just add 0.5 to x and then truncate it. if x=12.6, then it would calculate 13.1, and truncate it to 13. If x=14.4, it would calculate 14.9 and truncate it to 14.
You can use this function to format the decimal places in a number:
$num = 2.12;
printf("%.1f",$num);
prints:
2.1
see also: number_format()
Be sure that the output channel is available to write on before executing printf()! Some functions in classes available from various sources (in my case, DB_Sql::query() in PHPLIB) assume that printing will work, even after the default output stream has been closed. 
For me the issue was most notable in PHP4 session management when I was creating my own sess_write() handler. Since I was unable to find any function that checks for the output stream that printf() uses, I just had to drop the crazy use of the printf(). (does some function already exist to check for the presence of an output stream?)
Be careful when relying on typecasting with printf(). For example,
  printf("%d", "17,999") 
returns "17".
If anyone is looking for writing a quine using printf(),
this is my example:

This also helps those who are new to printf() see one way of using the 'mixed args' part, rather than just a single argument as in most examples I've seen.
//If you want to make many Hidden fields you can use the function 
//You can pass the values as array value,This will help you, when you are going to post many hiddend fields:-
function MakeHidden($ArrValues)
  {
    global $dearvar;
    echo $dearvar; 
    if(is_array($ArrValues)){
       foreach($ArrValues as $key=>$values)
       {
         echo $MakeHTML = "";
        }
   }  
   
   
   else {
      echo $MakeHTML = "";
     }
  return $MakeHTML;
}
//example:-
MakeHidden(array("value1","value2","value3"));
//OutPut :- 
copypasted from msdn
A format specification, which consists of optional and required fields, has the following form:
%[flags] [width] [.precision] [{h  |  l  |  I64  |  L}]type
Each field of the format specification is a single character or a number signifying a particular format option. The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign is followed by a character that has no meaning as a format field, the character is copied to stdout. For example, to print a percent-sign character, use %%.
The optional fields, which appear before the type character, control other aspects of the formatting, as follows: 
type 
Required character that determines whether the associated argument is interpreted as a character, a string, or a number (see the printf Type Field Characters table. 
flags 
Optional character or characters that control justification of output and printing of signs, blanks, decimal points, and octal and hexadecimal prefixes (see the Flag Characters table). More than one flag can appear in a format specification. 
width 
Optional number that specifies the minimum number of characters output (see printf Width Specification). 
precision 
Optional number that specifies the maximum number of characters printed for all or part of the output field, or the minimum number of digits printed for integer values (see the How Precision Values Affect Type table). 
h  |  l  |  I64  |  L 
Optional prefixes to type-that specify the size of argument (see the Size Prefixes for printf and wprintf Format-Type Specifiers table).
Why rounding is not same as for round()?
Try this code:

Result:
1.03
1.04
In my opion it should be:
1.04
1.04
Why is that?
If your missing features such as "-"*100 to print a single character multiple times you can use the slightly longer and less readable PHP equivalent printf("%'-100s",""); and sprint("%'-100s","").
be careful with integers, they cant hold large values.
printf("%d",10023123553.45634663);
will print out: 1433188961 
and
printf("%.0f",10023123553.45634663);
will print out: 10023123553
Several people have commented about problems with aligning numbers. I just wanted to add a bit of clarification.
According to the spec all True Type Fonts (especially porpotional spaced fonts) use a fixed width for numeric digits. All digits have the same width which is equal to the width of "0".
Where things go haywire when trying to align numbers is that the space character does not have the same width as a digit when using a porportional spaced font.
Therefore if you want to line up a column of numbers, you can not use leading spaces to position them unless you use the same quantity of space characters for each row. e.g. your numbers have leading zeros etc.
The simplest solution is to switch to a monospaced font. Alternativly you can use positioning tags.
Summary: Your numbers will always line up properly regardless of the font used, if you get the starting position to be consistant.
I don't know if this is useful to anyone, but here goes! Example for using the printf function to output an object.
class person
{
  var $name = "";
  function name($newname = NULL)
  {
    if(! is_null($newname))
    {
      $this->name=$newname;
    }
    return $this->name;
  }
  var $surname = "";
  function surname($newsurname = NULL)
  {
    if(! is_null($newsurname))
    {
      $this->surname=$newsurname;
    }
    return $this->surname;
  }
  var $age = "";
  function age($newage = NULL)
  {
    if(! is_null($newage))
    {
      $this->age=$newage;
    }
    return $this->age;
  }
}
$bob = new person;
$bob->name('Bob');
$bob->surname('Builder');
$bob->age('50');
printf("Hi %s, your surname is %s and you are %s years old", $bob->name, $bob->surname, $bob->age);
Outputs:
Hi Bob, your surname is Builder and you are 50 years old
In response to chris dot breen at accurate dot com :
This will work, but i didn't try:

Your problem came from the fact that in the string "\$s", the $ is simply escaped by the \, but but you must not do that with single quoted strings. Try to echo your strings to test it, or just go to http://www.php.net/manual/en/language.types.string.php

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)