前言
做金融項目的時候,接觸的大量數字字符串往往需要格式化顯示,這里我寫了一個demo,將字符串金額格式化,可以保留小數位數,可以添加貨幣標識前綴。
寫在string的原型里面,需要格式化的時候直接格式化唄!
例:'123345.23123'.moneyFormatter(2,'¥')
輸出: '¥123,345.23'
demo有注釋,我就不多做說明了
我的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位一個',',就不再進行參數靈活控制了!
