題目:將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; }