PHP: Как добавить начальные нули / нулевые дополнения для float через sprintf ()?

Я использую sprintf () для получения форматированной строки некоторых чисел с плавающей точкой с определенной точностью. Кроме того, я хотел добавить ведущие нули, чтобы сделать все числа даже в длину. Выполнение этого для целых чисел довольно прямолинейно :

sprintf('%02d', 1); 

Это приведет к 01 . Однако, попытка одинакового для float с точностью не работает:

 sprintf('%02.2f', 1); 

Выход 1.00 .

Как добавить старшие нули в значение float?

Related of "PHP: Как добавить начальные нули / нулевые дополнения для float через sprintf ()?"

Короткий ответ: sprintf('%05.2f', 1); даст желаемый результат 01.00

Обратите внимание, что %02 был заменен на %05 .

объяснение

Этот пост форума указал мне в правильном направлении: первое число не означает ни число ведущих нулей, ни число общих символов в левой части десятичного разделителя, а общее количество символов в полученной строке!

пример

sprintf('%02.2f', 1); дает по крайней мере десятичный разделитель « . » плюс не менее 2 символов для точности. Так как это уже 3 символа, то %02 в начале не влияет. Чтобы получить желаемые «2 ведущие нули», нужно добавить 3 символа для прецизионного и десятичного разделителя, что делает его sprintf('%05.2f', 1);

Некоторый код

 $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"; } 

Вывод

 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