Câu trả lời:
Trước hết, mô tả của bạn là sai lệch. Double
là một kiểu dữ liệu dấu chấm động. Có lẽ bạn muốn đệm các chữ số của mình bằng các số 0 ở đầu trong một chuỗi. Đoạn mã sau thực hiện điều đó:
$s = sprintf('%02d', $digit);
Để biết thêm thông tin, hãy tham khảo tài liệu của sprintf
.
sprintf
. Kiểm tra định dạng của số nguyên , đặc biệt là phần về chữ số bát phân.
Ngoài ra còn có str_pad
<?php
$input = "Alien";
echo str_pad($input, 10); // produces "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo str_pad($input, 6 , "___"); // produces "Alien_"
?>
Giải pháp sử dụng str_pad :
str_pad($digit,2,'0',STR_PAD_LEFT);
Điểm chuẩn trên php 5.3
Kết quả str_pad: 0,286863088608
Kết quả sprintf: 0,234171152115
Mã:
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
str_pad(9,2,'0',STR_PAD_LEFT);
str_pad(15,2,'0',STR_PAD_LEFT);
str_pad(100,2,'0',STR_PAD_LEFT);
}
$end = microtime(true);
echo "Result str_pad : ",($end-$start),"\n";
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
sprintf("%02d", 9);
sprintf("%02d", 15);
sprintf("%02d", 100);
}
$end = microtime(true);
echo "Result sprintf : ",($end-$start),"\n";
Hiệu suất của str_pad
phụ thuộc nhiều vào độ dài của đệm. Để có tốc độ ổn định hơn, bạn có thể sử dụng str_repeat .
$padded_string = str_repeat("0", $length-strlen($number)) . $number;
Đồng thời sử dụng giá trị chuỗi của số để có hiệu suất tốt hơn.
$number = strval(123);
Đã thử nghiệm trên PHP 7.4
str_repeat: 0.086055040359497 (number: 123, padding: 1)
str_repeat: 0.085798978805542 (number: 123, padding: 3)
str_repeat: 0.085641145706177 (number: 123, padding: 10)
str_repeat: 0.091305017471313 (number: 123, padding: 100)
str_pad: 0.086184978485107 (number: 123, padding: 1)
str_pad: 0.096981048583984 (number: 123, padding: 3)
str_pad: 0.14874792098999 (number: 123, padding: 10)
str_pad: 0.85979700088501 (number: 123, padding: 100)
digit
giá trị là số nguyên mà thời gian nhất định lỗi, Nếu vượt qua như chuỗi thời gian đó không phải vấn đề