标签:需要 格式化 符号 返回 简介 ring pre join meta
做金融项目的时候,接触的大量数字字符串往往需要格式化显示,这里我写了一个demo,将字符串金额格式化,可以保留小数位数,可以添加货币标识前缀。
写在string的原型里面,需要格式化的时候直接格式化呗!
例:‘123345.23123‘.moneyFormatter(2,‘¥‘)
输出: ‘¥123,345.23‘
demo有注释,我就不多做说明了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//金额格式转化
String.prototype.moneyFormatter = function(n,current){ //n为保留的小数点位数,不传则不处理,current为前面加上的货币符号,必须是字符串,例‘$‘,‘¥‘
var moneyStr = this;
if(moneyStr.indexOf(‘.‘) == -1){ //如果不是小数
var len = moneyStr.length; //金额长度
var arr = []; //保存分割后的字符串
var num = Math.floor(len/3);//循环分割次数
var firstLen = len%3;
var firstStr = moneyStr.substr(0,firstLen); //分割的起始第一部分
if(firstStr.length > 0){
arr.push(firstStr);
}
for(var i=0;i<num;i++){ //后续部分循环
arr.push(moneyStr.substr(i*3+firstLen,3))
}
if(current && typeof(current) == ‘string‘){
return current + arr.join(‘,‘); //返回格式化后的字符串
}else{
return arr.join(‘,‘); //返回格式化后的字符串
}
}else{ //如果是小数
if(n){ //如果传入了需要保留的小数位数
moneyStr = String(Number(moneyStr).toFixed(n))
}
var moneyStr1 = moneyStr.split(‘.‘)[0]; //金额整数部分
var moneyStr2 = moneyStr.split(‘.‘)[1]; //金额小数部分
var len1 = moneyStr1.length; //金额整数部分长度
var arr1 = []; //保存整数部分分割后的字符串
var num1 = Math.floor(len1/3);//循环分割次数
var firstLen1 = len1%3;
var firstStr1 = moneyStr.substr(0,firstLen1); //分割的起始第一部分
if(firstStr1.length > 0){
arr1.push(firstStr1);
}
for(var i=0;i<num1;i++){ //后续部分循环
arr1.push(moneyStr1.substr(i*3+firstLen,3))
}
var newMoneyStr1 = arr1.join(‘,‘);
//整数部分处理完毕
if(current && typeof(current) == ‘string‘){
return current + newMoneyStr1+‘.‘+moneyStr2; //返回格式化后的字符串
}else{
return newMoneyStr1+‘.‘+moneyStr2; //返回格式化后的字符串
}
}
}
</script>
</body>
</html>
接受两次参数,n和current,不传则不处理,如果要传入需要指定顺序传入,先传n,n为需要保留几位小数,再传current为如果要加上货币前缀就直接传入!
方法内部默认是标准金钱展现形式,3位一个‘,‘,就不再进行参数灵活控制了!
标签:需要 格式化 符号 返回 简介 ring pre join meta
原文地址:http://www.cnblogs.com/web-MrShi/p/6231169.html