Kısa cevap: %02
%05
yerini nasılsprintf('%05.2f', 1);
istenen bir sonuç 01.00
Not verecektir. Açıklama
Bu forum post
bana doğru yönde işaret etti: İlk sayı ne gelen sıfırların sayısını ne de ondalık Seperatör solunda toplam charaters sayısını ancak toplam sayısını arasında ifade etmez sonuçtaki dizede karakterler!
Örnek az
sprintf('%02.2f', 1);
verimler hassas ondalık seperatör ".
" artı en az 2 karakter. Toplamda 3 karakter olduğundan, başlangıçtaki %02
'un bir etkisi yoktur. o sprintf('%05.2f', 1);
Bazı kod verme, tek hassas ve ondalık seperatör için 3 karakterler eklemek gerekiyor istenen "2 baştaki sıfırları" almak için
$num = 42.0815;
function printFloatWithLeadingZeros($num, $precision = 2, $leadingZeros = 0){
$decimalSeperator = ".";
$adjustedLeadingZeros = $leadingZeros + mb_strlen($decimalSeperator) + $precision;
$pattern = "%0{$adjustedLeadingZeros}{$decimalSeperator}{$precision}f";
return sprintf($pattern,$num);
}
for($i = 0; $i <= 6; $i++){
echo "$i max. leading zeros on $num = ".printFloatWithLeadingZeros($num,2,$i)."\n";
}
Çıktı
0 max. leading zeros on 42.0815 = 42.08
1 max. leading zeros on 42.0815 = 42.08
2 max. leading zeros on 42.0815 = 42.08
3 max. leading zeros on 42.0815 = 042.08
4 max. leading zeros on 42.0815 = 0042.08
5 max. leading zeros on 42.0815 = 00042.08
6 max. leading zeros on 42.0815 = 000042.08