面試:將數據按照千分位分割的5種方法

題目:將1234567890按照千分位分割,結果爲"1,234,567,890.00"形式(這裏保留了二位小數,按題目實際要求處理)php

分析:添加千分位分割符是從個位往高位數的,所以要考慮從後往前處理字符串。面試

方法一:調用php函數處理。直接使用php的函數,但面試要求實現的應該是不讓使用系統函數的數組

$res = number_format($num);

方法2、按照數字從後面數過來,每3位添加一個',',那麼,若是,咱們把數字反轉過來,而後再分割,不就能夠直接添加',' 而後再反轉過去函數

function toNum2($str) {
    $str = sprintf('%.2f',$str);
    $strArr = explode('.',$str);
    $leftStr = $strArr[0];
    $rigthStr = $strArr[1];
    $temp = implode(',',str_split(strrev($leftStr),3));
    return strrev($temp) . '.' . $rigthStr;
}

方法三 分爲是3的倍數和不是3的倍數,不是的話分爲左右兩部分code

function toNum1($str){
    $str = sprintf('%.2f',$str);  //把數字格式化爲2位小數
    $strArr = explode('.',$str);
    $leftStr = $strArr[0];
    $rigthStr = $strArr[1];
    $len = strlen($leftStr);
    if($len%3 == 0){
        //爲3的倍數,直接截取
        $temp = str_split($leftStr,3);
        return implode(",",$temp) . '.' . $rigthStr;
    }else{
        //不是3的倍數,計算右邊爲3倍數的部分
        $left = substr($str,0,$len%3); //先求模,這個摸就是左邊長度
        $temp = str_split(substr($leftStr,$left),3);

        //而後把left部分放壓入數組最前面
        array_unshift($temp,$left);
        return implode(",",$temp) . '.' . $rigthStr;
    }
}

方法四:按照從後往前的順序,倒敘依次截取字符串,每到3位拼接","orm

function toNum3($str){
    $str = sprintf('%.2f',$str);
    $strArr = explode('.',$str);
    $leftStr = $strArr[0];
    $rigthStr = $strArr[1];
    $len = strlen($leftStr);
 
    $temp = '';
    for($i=1;$i<=$len;$i++){
        if($i%3 == 0 && ($i != $len)){//這裏要判斷,不能是數字最前面那個避免在前面多加','
            $temp = ',' . substr($leftStr,-$i,1)  . $temp;
        }else{
            $temp = substr($leftStr,-$i,1) . $temp;
        }
    }
    return $temp . '.' . $rigthStr;
}

方法五:將字符串當作數組倒敘來取,而後依次拼接字符串

function toNum3($str){
    $str = sprintf('%.2f',$str);
    $strArr = explode('.',$str);
    $leftStr = $strArr[0];
    $rigthStr = $strArr[1];
    $len = strlen($leftStr);
 
    $temp = '';
    for($i=$len-1,$j=1;$i>=0;$i--,$j++) {
            if($j%3==0) {
                $temp = ",".$str[$i].$temp;
            }else{
                $temp = $str[$i].$temp;
            }
    }
    return $temp . '.' . $rigthStr;
}
相關文章
相關標籤/搜索