PHP integer part padding

前端 未结 5 1998
北恋
北恋 2020-12-21 04:32

I need to pad the integer part with 0, the integer part must be at least 2 characters

str_pad( 2    ,2,\"0\",STR_PAD_LEFT);// 02 -> works
str_pad( 22   ,2         


        
相关标签:
5条回答
  • 2020-12-21 04:55

    You can also use printf() functions to pad the integer :

    Something like (codepad):

    <?php
    
    function pad($n) {
        $n = explode('.', (string)$n);
    
        if (2 === count($n)) {
            return sprintf("%02d.%d\n", $n[0], $n[1]);    
        }
    
        return sprintf("%02d\n", $n[0]);    
    }
    
    foreach (array(2, 22, 222, 2., 2.11) as $num) {
        echo pad($num);
    }
    
    // returns 02, 22, 222, 02, 02.11
    
    0 讨论(0)
  • 2020-12-21 04:56

    A fast solution: http://codepad.org/EXcbqGos

    $num = 2.11;
    echo str_pad( floor($num) ,2,"0",STR_PAD_LEFT).substr($num-floor($num), 1);
    

    It will only work for non-negative numbers.

    0 讨论(0)
  • 2020-12-21 05:02

    Another one :

    function my_str_pad ($input ,$pad_length, $pad_string) {
        $pad_length += strlen($input) - strlen(intval($input));
    
        return str_pad($input, $pad_length, $pad_string, STR_PAD_LEFT);
    }
    

    The following test :

    str_pad(2., 2, "0", STR_PAD_LEFT);// 2. -> fails -> 02. or 02
    

    Fails because str_pad is working on a string, but you entered a number with a decimal but no decimal part so it is considered as an integer. If you want to keep the '.' use the following instead :

    str_pad("2.", 2, "0" , STR_PAD_LEFT);// 2. -> works
    
    0 讨论(0)
  • 2020-12-21 05:06

    No, there is no simple way.

    function padIntegerPart($n, $len) {
        $intPart = (int)$n;
    
        return str_repeat('0', max(0, $len - 1 - floor(log($intPart, 10)))) . $n;
    }
    
    0 讨论(0)
  • 2020-12-21 05:16

    If the output you're looking for is 02.11, then try sprintf():

    sprintf("%05.2f", 02.11); // Output: 02.11
               ^ ^--- float precision
               |--- total string length
    
    sprintf("%07.2f", 02.11); // Output: 0002.11
    

    Links that may help are:

    http://us2.php.net/sprintf

    Extra leading zeros when printing float using printf?

    0 讨论(0)
提交回复
热议问题