Рубрики
Uncategorized

Интервью: пять способов разделить данные на тысячи

Автор оригинала: David Wong.

Название: разделите 1234567890 на тысячи, и результат будет в виде “1234567890.00” (здесь зарезервированы два знака после запятой, которые должны обрабатываться в соответствии с фактическими требованиями названия)

Анализ: добавление тысячного разделителя-это переход от одной цифры к старшей цифре, поэтому необходимо рассмотреть возможность обработки строк с обратной стороны на переднюю.

Метод 1: вызовите функцию PHP для обработки. Используйте функции PHP напрямую, но то, что требуется для собеседования, – это не использовать системные функции

$res = number_format($num);

Способ 2: добавьте одну”, ” для каждых трех цифр в соответствии с номером на обратной стороне. Затем, если мы перевернем число и затем разделим его, мы не сможем напрямую добавить”,”, а затем перевернуть прошлое

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 раза, а не на 3 раза. Если нет, то он делится на левую и правую части

function toNum1($str){
    $STR = sprintf ('%. 2F', $STR); // format the number to 2 decimal places
    $strArr = explode('.',$str);
    $leftStr = $strArr[0];
    $rigthStr = $strArr[1];
    $len = strlen($leftStr);
    if($len%3 == 0){
        //Multiple of 3, direct intercept
        $temp = str_split($leftStr,3);
        return implode(",",$temp) . '.' . $rigthStr;
    }else{
        //It's not a multiple of 3. Calculate the part with a multiple of 3 on the right
        $left = substr ($STR, 0, $len% 3); // first find the module, which is the left length
        $temp = str_split(substr($leftStr,$left),3);

        //Then press the left part into the front of the array
        array_unshift($temp,$left);
        return implode(",",$temp) . '.' . $rigthStr;
    }
}

Способ 4: в соответствии с последовательностью от задней части к передней, переверните последовательность, чтобы перехватить строку, и соедините”, ” каждые 3 бита

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)) {// to judge here, it can't be the first one to avoid adding ','
            $temp = ',' . substr($leftStr,-$i,1)  . $temp;
        }else{
            $temp = substr($leftStr,-$i,1) . $temp;
        }
    }
    return $temp . '.' . $rigthStr;
}

Метод 5: возьмите строку в качестве флэш-памяти массива, а затем объедините ее по очереди

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