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.
(PHP 4, PHP 5, PHP 7, PHP 8)
printf — Biçemli bir dizge çıktılar
Belirtilen biçem
dizgesine göre üretilmiş bir dizge
çıktılar.
biçem
Biçem dizgesi sıfır veya daha fazla yönergeden oluşur:
doğrudan sonuca kopyalanmış sıradan karakterler (%
hariç) ve dönüşüm belirtimleri, her biri kendi
bağımsız değişkeninin getirilmesiyle sonuçlanır.
Bir dönüşüm belirtiminin sözdizimi:
%[degnum$][seçenekler][genişlik][.hassasiyet]belirteç
.
Ardına bir dolar imi $
konmuş bir tamsayı;
dönüşümde ele alınacak bağımsız değişken sayısını belirler.
Seçenek | Açıklama |
---|---|
- |
Verilen alan genişliğinde sola dayalı; Sağa dayalılık öntanımlıdır. |
+ |
Pozitif sayıların önüne artı imi konur; Öntanımlı olarak sadece negatif sayılara eksi imi konur. |
(boşluk) |
Sonuca boşluklarla dolgu yapar. Bu öntanımlıdır. |
0 |
Sayılar sadece soldan sıfırla doldurulur.
s belirteçleri ile sağ taraf da sıfırla doldurulur.
|
' (krk) |
Sonuca (krk) karakteri ile dolgu yapılır. |
Bu dönüşümün kaç karakterle sonuçlanacağının belirtildiği tamsayı veya
*
. *
kullanılmışsa, genişlik,
belirtici tarafından biçimlendirilmiş değerden önce ek bir tamsayı
değeri olarak sağlanır.
Bir nokta .
ve ardından anlamı belirtece bağlı olan
seçimlik bir tamsayı veya *
:
e
, E
,
f
ve F
belirteçleri için: ondalık noktadan sonra yazdırılacak rakam sayısı
(6 öntanımlıdır)
g
ve G
,
h
ve H
belirteçleri için: yazdırılacak maksimum anlamlı basamak sayısı.
s
belirteci için: dizeye azami karakter sınırı
koyan bir kesme noktası gibi davranır.
Bilginize: Nokta, hassasiyet için açık bir değer olmadan belirtilirse, 0 varsayılır.
*
kullanılmışsa, genişlik, belirtici tarafından biçimlendirilmiş değerden önce ek bir tamsayı değeri olarak sağlanır.
Belirteç | Açıklama |
---|---|
% |
Yüzde karakteri. Değer gerekmez. |
b |
Değer bir tamsayı olarak ele alınır ve ikil bir sayı olarak gösterilir. |
c |
Değer bir tamsayı olarak ele alınır ve ASCII bir karakter olarak gösterilir. |
d |
Değer bir tamsayı olarak ele alınır ve (işaretli) bir ondalık sayı olarak gösterilir. |
e |
Değer bilimsel bir gösterim (örn. 1.2e+2) olarak ele alınır. Hassasiyet belirteci,ondalık noktadan sonraki basamakların sayısını ifade eder. |
E |
e belirteci gibi, farklı olarak büyük harf kullanır
(örn. 1.2E+2).
|
f |
Değer kayan noktalı sayı olarak ele alınır ve kayan noktalı sayı olarak gösterilir (yerele uygun). |
F |
Değer kayan noktalı sayı olarak ele alınır ve kayan noktalı sayı olarak gösterilir (yerele bakmaz). |
g |
Genel biçem. P sıfırdan farklı hassasiyet olsun, hassasiyet verilmemişse 6, hassasiyet sıfır ise 1 olsun. E tarzındaki dönüşümün üssü X ise: P > X ≥ −4 ise, dönüşüm f tarzı ve hassasiyet P − (X + 1) olur. Aksi takdirde, dönüşüm e tarzı ve hassasiyet P − 1 olur. |
G |
g gibidir fakat
E ve f kullanır.
|
h |
g gibidir fakat F kullanır.
PHP 8.0.0 ve sonrasında kullanılabilir.
|
H |
g gibidir fakat
E ve F kullanır.
PHP 8.0.0 ve sonrasında kullanılabilir.
|
o |
Değer bir tamsayı olarak ele alınır ve sekizlik bir sayı olarak gösterilir. |
s |
Değer bir dizge olarak ele alınır ve gösterilir. |
u |
Değer bir tamsayı olarak ele alınır ve işaretsiz bir ondalık sayı olarak gösterilir. |
x |
Değer bir tamsayı olarak ele alınır ve onaltılık bir sayı olarak gösterilir (küçük harfli). |
X |
Değer bir tamsayı olarak ele alınır ve onaltılık bir sayı olarak gösterilir (büyük harfli). |
c
tür belirteci dolguyu ve genişliği yoksayar.
Karakter başına birden fazla bayt gerektiren karakter kümeleriyle dizge ve genişlik belirteçlerini bir arada kullanmaya çalışmak, beklenmeyen sonuçlar verebilir
Değişkenler, belirteç için uygun bir türe zorlanacaktır:
Tür | Belirteçler |
---|---|
string | s |
int |
d ,
u ,
c ,
o ,
x ,
X ,
b
|
double |
e ,
E ,
f ,
F ,
g ,
G ,
h ,
H
|
değerler
Çıktılanın dizgenin uzunluğunu döndürür.
PHP 8.0.0 ve sonrasında, bağımsız değişken sayısı sıfırsa
ValueError oluşuyor. PHP 8.0.0 öncesinde bunun
yerine bir E_WARNING
uyarısı verilirdi.
PHP 8.0.0 ve sonrasında, [width]
(genişlik) sıfırdan
küçükse veya PHP_INT_MAX
'tan büyükse bir
ValueError oluşuyor. PHP 8.0.0 öncesinde, bir
E_WARNING
uyarısı verilirdi.
PHP 8.0.0 ve sonrasında, [precision]
(hassasiyet)
sıfırdan küçükse veya PHP_INT_MAX
'tan büyükse bir
ValueError oluşuyor. PHP 8.0.0 öncesinde, bir
E_WARNING
uyarısı verilirdi.
PHP 8.0.0 ve sonrasında, gereğinden daha az bağımsız değişken verildiğinde
bir ArgumentCountError oluşuyor. PHP 8.0.0 öncesinde,
bir E_WARNING
uyarısı verilirdi.
Sürüm: | Açıklama |
---|---|
8.0.0 |
Bu işlev başarısızlık durumunda artık false döndürmüyor.
|
8.0.0 |
Bağımsız değişken sayısı sıfırsa ValueError oluşuyor. Evvelce bunun yerine bir E_WARNING uyarısı verilirdi.
|
8.0.0 |
[width] (genişlik) sıfırdan küçükse veya
PHP_INT_MAX 'tan büyükse bir
ValueError oluşuyor;
evvelce bir E_WARNING uyarısı verilirdi.
|
8.0.0 |
[precision] (hassasiyet) sıfırdan küçükse veya
PHP_INT_MAX 'tan büyükse bir
ValueError oluşuyor;
evvelce bir E_WARNING uyarısı verilirdi.
|
8.0.0 |
Gereğinden daha az bağımsız değişken verildiğinde bir
ArgumentCountError oluşuyor; evvelce bir
E_WARNING uyarısı verilirdi.
|
Örnek 1 - printf(): çeşitli örnekler
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'
// dikkat: çift %%, tek bir '%' karakteri basar
printf("%%b = '%b'\n", $n); // ikil gösterim
printf("%%c = '%c'\n", $c); // ascii karakter basar, chr() işleviyle aynı
printf("%%d = '%d'\n", $n); // standart tamsayı gösterimi
printf("%%e = '%e'\n", $n); // bilimsel gösterim
printf("%%u = '%u'\n", $n); // işaretsiz pozitif tamsayı gösterimi
printf("%%u = '%u'\n", $u); // işaretsiz negatif tamsayı gösterimi
printf("%%f = '%f'\n", $n); // kayan noktalı sayı gösterimi
printf("%%o = '%o'\n", $n); // sekizlik gösterim
printf("%%s = '%s'\n", $n); // dizgesel gösterim
printf("%%x = '%x'\n", $n); // onaltılık küçük harf gösterimi
printf("%%X = '%X'\n", $n); // onaltılık büyük harf gösterimi
printf("%%+d = '%+d'\n", $n); // pozitif tamsayıda işaret belirteci
printf("%%+d = '%+d'\n", $u); // negatif tamsayıda işaret belirteci
?>
Yukarıdaki örneğin çıktısı:
%b = '10100111101010011010101101' %c = 'A' %d = '43951789' %e = '4.39518e+7' %u = '43951789' %u = '4251015507' %f = '43951789.000000' %o = '247523255' %s = '43951789' %x = '29ea6ad' %X = '29EA6AD' %+d = '+43951789' %+d = '-43951789'
Örnek 2 - printf(): dizge belirteçleri
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s); // standart dizge çıktısı
printf("[%10s]\n", $s); // boşluk dolgulu sağa yanaşık
printf("[%-10s]\n", $s); // boşluk dolgulu sola yanaşık
printf("[%010s]\n", $s); // sıfır dolgulu sağa yanaşık
printf("[%'#10s]\n", $s); // '#' dolgulu sağa yanaşık
printf("[%'#*s]\n", 10, $s); // dolgu genişliği ek bağımsız değişken olarak sağlanır
printf("[%10.9s]\n", $t); // 9 karakterden kırparak sağa yanaşık
printf("[%-10.9s]\n", $t); // 9 karakterden kırparak sola yanaşık
?>
Yukarıdaki örneğin çıktısı:
[monkey] [ monkey] [monkey ] [0000monkey] [####monkey] [####monkey] [ many monk] [many monk ]
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 <?php printf('There is a difference between %s and %s', array('good', 'evil')); ?> (this doesn't work) instead of <?php printf('There is a difference between %s and %s', 'good', 'evil'); ?> you can use this function:
<?php
function printf_array($format, $arr)
{
return call_user_func_array('printf', array_merge((array)$format, $arr));
}
?>
Use it the following way:
<?php
$goodevil = array('good', 'evil');
printf_array('There is a difference between %s and %s', $goodevil);
?>
and it will print:
There is a difference between good and evil
A few things to note about printf:
1. The definition of specifier g (or G) is often wrongly stated as being "use e or f (or E or f), whichever results in the shorter string". The correct rule is given in the documentation and it does not always give this result.
2. For g/G/h/H, trailing zeros after the decimal point are removed (but not a zero just after the decimal point, in the e/E style).
3. g/G are locale-aware whether the e/E or f style is produced.
4. For b/o/x/X/u (that is, all integer styles except d) the result shown for negative values is the twos complement form of the number, 2**32 + v, where v is the (negative) value.
To provide a more user-friendly interface, you can use colors when printing text in the terminal.
p('Ordinary text.');
p('Warning: Check this out...', 'info');
p('Ops! Something went wrong.', 'error');
p('Yeah... done!', 'success');
function p($text, $style = '', $newLine = true) {
$styles = array(
'success' => "\033[0;32m%s\033[0m",
'error' => "\033[31;31m%s\033[0m",
'info' => "\033[33;33m%s\033[0m",
'Black' => "\033[0;30m%s\033[0m",
'Red' => "\033[0;31m%s\033[0m",
'Green' => "\033[0;32m%s\033[0m",
'Yellow' => "\033[0;33m%s\033[0m",
'Blue' => "\033[0;34m%s\033[0m",
'Purple' => "\033[0;35m%s\033[0m",
'Cyan' => "\033[0;36m%s\033[0m",
'Gray' => "\033[0;37m%s\033[0m",
'Graphite' => "\033[1;30m%s\033[0m",
'Bold Red' => "\033[1;31m%s\033[0m",
'Bold Green' => "\033[1;32m%s\033[0m",
'Bold Yellow' => "\033[1;33m%s\033[0m",
'Bold Blue' => "\033[1;34m%s\033[0m",
'Bold Purple' => "\033[1;35m%s\033[0m",
'Bold Cyan' => "\033[1;36m%s\033[0m",
'Bold White' => "\033[1;37m%s\033[0m",
'Bg Black' => "\033[40;1;37m%s\033[0m",
'Bg Red' => "\033[41;1;37m%s\033[0m",
'Bg Green' => "\033[42;1;37m%s\033[0m",
'Bg Yellow' => "\033[43;1;37m%s\033[0m",
'Bg Blue' => "\033[44;1;37m%s\033[0m",
'Bg Purple' => "\033[45;1;37m%s\033[0m",
'Bg Cyan' => "\033[46;1;37m%s\033[0m",
'Bg Gray' => "\033[47;1;37m%s\033[0m",
'Underscore' => "\033[4;37m%s\033[0m",
'Inverted' => "\033[7;37m%s\033[0m",
'Blink' => "\033[5;37m%s\033[0m",
);
$format = '%s';
if (isset($styles[$style])) {
$format = $styles[$style];
}
if ($newLine) {
$format .= PHP_EOL;
}
printf($format, $text);
}
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()
To format a dollar value as in $123.00 that may otherwise look like $123 use this
print ('$'); // the dollar sign in front of our answer
printf ('%.2f',$price);