码迷,mamicode.com
首页 > Web开发 > 详细

php数字格式化

时间:2015-05-07 12:25:09      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

看到一道面试题说不使用php函数将一个数字字符串(如123456789)格式化成每3个数字用逗号隔开的形式。

我的 第一反应是从尾部开始每3个插入一个逗号,可是查了查好象没有能这样插入字符串的函数,就只能自己截取拼接了。那么从尾部向前截取3个字符,再看前面部分是否大于3位,如果是就继续截取,直到前部分小于3位,最后把所有的后半部分加上逗号拼接起来,很自然地使用了递归。代码是这样:

function numFormat($num){
    if( $len = strlen($num) > 3 ){        
        $front = substr($num,0,$len-4); //截取前面部分
        $after = substr($num,-3);    //截取后面部分
        $newf = numFormat($front); //递归处理前面部分
        $new = $newf.‘,‘.$after;  //拼接上逗号
        return $new;
    }
    return $num;
}

代码中有一些问题,使用了2次的字符串的截取,不知道性能会不会很差,并且只考虑了正整数的情况,没有针对有负号和小数点的处理。

看了一下原文的答案,是这样的:

<?php
    $str = "12345678932132";
 
    function nformat($str) {
        $n = "";   //临时的变量
        $m = strlen($str); //获取字符串长度
        $k = $m %  3;  //让整个长度和3取余之后余数是多少 = 0
 
        for($i=0; $i < $m;  $i++) {
            if($i%3 == $k && $i!=0) {
                $n .=",";
            }
            $n .= $str{$i};
        }
        return $n;
    }
    echo nformat($str);
?>

采取了完全不同的思路,基本是这样:循环地把每一个字符拼接到一个新的字符串,在遇到个数是3的整数倍时加入逗号,同样没有小数和负数的处理。

php数字格式化

标签:

原文地址:http://www.cnblogs.com/hushuyuan/p/4484235.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!