PHP数字格式化,每三位逗号分隔数字,可以保留小数

在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的。

先来系统简单的:

string number_format ( float number [, int decimals [, string dec_point, string thousands_sep]] ):

示例代码

echo number_format('169856420');

输出结果将为:

169,856,420

示例代码

echo number_format('1000000',2);

输出结果

1,000,000.00

示例代码

echo number_format('1000000',2,',','.');

输出结果

1.000.000,00

再看写的函数:

function num_format($num){

	if (!is_numeric($num)) {
		return false;
	}

	$num = explode('.', $num); // 把整数和小数分开
	$rl = $num[1]; // 小数部分的值
	$j = strlen($num[0]) % 3; // 整数有多少位
	$sl = substr($num[0], 0, $j); // 前面不满三位的数取出来
	$sr = substr($num[0], $j); // 后面的满三位的数取出来
	$i = 0;

	while ($i <= strlen($sr)) {
		$rvalue = $rvalue . ',' . substr($sr, $i, 3); // 三位三位取出再合并,按逗号隔开
		$i = $i + 3;
	}

	$rvalue = $sl . $rvalue;
	$rvalue = substr($rvalue, 0, strlen($rvalue) - 1); // 去掉最后一个逗号
	$rvalue = explode(',', $rvalue); // 分解成数组

	if ($rvalue[0] == 0) {
		array_shift($rvalue); // 如果第一个元素为0,删除第一个元素
	}

	$rv = $rvalue[0]; // 前面不满三位的数
	for ($i = 1; $i < count($rvalue); $i++) {
		$rv = $rv . ',' . $rvalue[$i];
	}

	if (!empty($rl)) {
		$rvalue = $rv . '.' . $rl; // 小数不为空,整数和小数合并
	} else {
		$rvalue = $rv; // 小数为空,只有整数
	}

	return $rvalue;
}
posted @ 2016-07-13 00:20  52php  阅读(958)  评论(0编辑  收藏  举报