IT

문자열의 제로 패드 숫자

itgroup 2022. 10. 18. 21:39
반응형

문자열의 제로 패드 숫자

(1에서 9까지)에서 (01에서 09)까지 한 자릿수를 캐스팅해야 합니다.나는 방법이 생각나지만 그것은 크고 추하고 번거롭다.분명 뭔가 간결한 방법이 있을 거야.제안 사항

우선, 당신의 설명은 오해를 불러일으키고 있습니다. Double는 부동소수점 데이터 유형입니다.문자열의 선두에 0을 붙여 숫자를 채우는 것이 좋습니다.다음 코드가 이를 실현합니다.

$s = sprintf('%02d', $digit);

상세한 것에 대하여는, 의 메뉴얼을 참조해 주세요.

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_"
?>

str_pad를 사용한 솔루션:

str_pad($digit,2,'0',STR_PAD_LEFT);

php 5.3 벤치마크

결과 str_pad : 0.286863088608

결과 sprintf : 0.234171152115

코드:

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

퍼포먼스str_pad패딩의 길이에 따라 크게 달라집니다.보다 일관된 속도를 위해 str_repeat을 사용할 수 있습니다.

$padded_string = str_repeat("0", $length-strlen($number)) . $number;

또한 성능 향상을 위해 숫자의 문자열 값을 사용하십시오.

$number = strval(123);

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)

여기 양수와 음수를 모두 처리할 수 있는 솔루션이 있습니다.

<?php

// add zeros to a number at left or right side.
function add_zeros_to_number( $number, $number_of_zeros, $zeros_position="left"){
    // check if number is negative
    $is_negative = FALSE;
    if ( strpos($number , '-') !== FALSE ){
        $is_negative = TRUE;
        $number = substr($number, 1);
    }
    if($zeros_position == "right"){
        $r = str_pad($number, $number_of_zeros, "0", STR_PAD_RIGHT);
    }else{
        $r = str_pad($number, $number_of_zeros, "0", STR_PAD_LEFT);
    }
    if( $is_negative ){
        return "-".$r;
    }else{
        return $r;
    }
}

// how to use
$number = -333;   // Desire number 
$number_of_zeros = 4;  // number of zeros [ your number length + zeros ]
$position = "right";  // left or right . default left
echo $result = add_zeros_to_number($number, $number_of_zeros, $position);

// output
// -333 => -3330    left
// -333 => -0333    right

언급URL : https://stackoverflow.com/questions/324358/zero-pad-digits-in-string

반응형