Php将数据按照千分位分割的5种方法

摘要:调用php函数处理。直接使用php的函数,但面试要求实现的应该是不让使用系统函数的,按照数字从后面数过来,每3位添加一个,那么,如果,我们把数字反转过来,然后再分割

题目:

将1234567890按照千分位分割,结果为"1,234,567,890.00"形式(这里保留了二位小数,按题目实际要求处理)


分析:

添加千分位分割符是从个位往高位数的,因此要考虑从后往前处理字符串。


方法一:调用php函数处理。直接使用php的函数,但面试要求实现的应该是不让使用系统函数的

$res = number_format($num);


方法二 :  按照数字从后面数过来,每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的倍数,不是的话分为左右两部分

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位拼接","

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

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_6016