JavaScript-PHP和JS实现比较大的数以“,”做分隔符分隔,如何做?
在做一个应用,需要对比较大的数字做一个格式化,
实现效果:类似1234567890-->1,234,567,890。
要求:前端和后台都需要用到,因此需要php和js两个版本。
由于调用频率比较高,因此要求比较高效。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在另一个问题里回答过
var s = '12345';
s.replace(/(d)(?=(d{3})+(?!d))/g, "$1,")
利用肯定环视,找到一位数字且右边有若干组3位数字,则在当前数字后面跟上一个逗号,小于3位数的也不需要额外判断
php 有内置函数,js的话网上也有好多,建议以后遇到js实现php的某个函数时先到 phpjs.org 找找,没有个的话在自己写。
php: number_format(1234567890);
js : number_format(123456789);
function number_format (number, decimals, dec_point, thousands_sep) {
number = (number + '').replace(/[^0-9+-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec); return '' + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) { s[0] = s[0].replace(/B(?=(?:d{3})+(?!d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0'); }
return s.join(dec);
}
PHP的就不重复了,分析一段个人认为不错的JS
Number.prototype.number_format = function(decimals, decimal_sep, thousands_sep)
{
var n = this,
c = isNaN(decimals) ? 2 : Math.abs(decimals),
d = decimal_sep || '.',
t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
sign = (n < 0) ? '-' : '',
i = parseInt(n = Math.abs(n).toFixed(c)) + '',
j = ((j = i.length) > 3) ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(d{3})(?=d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
}
//测试
alert((1234567890).number_format(0));
今天正好找这个,然后收藏了一个,分享给大家:
function convert($num)
{
$v = explode('.',$num);
$rl = $v[1];
$j = strlen($v[0]) % 3;
$sl = substr($v[0], 0, $j);
$sr = substr($v[0], $j);
$rvalue = '';
$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);
}
$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;
}
//测试
$sr = 16546465465.42343;
echo convert($sr);
<script type="text/javascript">
var str = '1234567890';
if(str.length > 3){
str = str.replace(/(?=(?:d{3})+(?!d))/g,',');
}
alert(str);
</script>
也可以看看这个JavaScript版本的,我感觉这个挺好的
<script language="javascript">
function maskNumber(p_number, p_type) {
p_number = p_number.replace(/[^d]/g,'');
if(p_type == 'i') return processInt(p_number);
else if(p_type == 'f') {
if(p_number.indexOf('.')) {
var arr = new Array();
arr = p_number.split('.');
var intpart = processInt(arr[0]);
var decpart = processDec(arr[1]);
if(intpart != '') return intpart + decpart;
else return '';
}
else return '';
}
}
function processDec(p_dec) {
if(p_dec == undefined || p_dec == '') return '.00';
else return '.' + p_dec.substr(0,2);
}
function processInt(p_number) {
var arr = new Array();
var numlen = p_number.length;
var r = 0;
for(var i = 0; i < numlen; i++) {
if(p_number.charAt(i) == ',' || p_number.charAt(i) == '') continue;
else {
arr[r++] = p_number.charAt(i);
}
}
var strarr = new Array();
var newarr = arr.reverse();
var j = 0;
var k = 0;
for(var x in newarr) {
strarr[k++] = newarr[x];
if(++j == 3) {
strarr[k++] = ',';
j = 0;
}
}
var newstr = strarr.reverse();
var str = '';
for(var x in newstr) {
str += newstr[x];
}
if(r % 3 == 0) {
return str.substr(1, str.length);
} else {
return str;
}
}
function unMaskNumber(p_number) {
var str = '';
var numlen = p_number.length;
var r = 0;
for(var i = 0; i < numlen; i++) {
if(p_number.charAt(i) == ',' || p_number.charAt(i) == '') continue;
else {
str += p_number.charAt(i);
}
}
return str;
}
</script>
<input type='text' value='' size="100" onKeyUp='javascript:this.value=maskNumber(this.value, "i")'/>