JS中金额转换以及格式化
- 为数字加上单位:万或亿
import Vue from 'vue'
/**
* 为数字加上单位:万或亿
*
* 例如:
* 1000.01 => 1000.01
* 10000 => 1万
* 99000 => 9.9万
* 566000 => 56.6万
* 5660000 => 566万
* 44440000 => 4444万
* 11111000 => 1111.1万
* 444400000 => 4.44亿
* 40000000,00000000,00000000 => 4000万亿亿
* 4,00000000,00000000,00000000 => 4亿亿亿
*
* @param {number} number 输入数字.
* @param {number} decimalDigit 小数点后最多位数,默认为2
* @return {string} 加上单位后的数字
*/
export function getDigit(integer) {
var digit = -1;
while (integer >= 1) {
digit++;
integer = integer / 10;
}
return digit;
}
export function addWan(integer, number, mutiple, decimalDigit) {
// var me = this;
// var digit = me.getDigit(integer);
var digit = getDigit(integer);
if (digit > 3) {
var remainder = digit % 8;
if (remainder >= 5) { // ‘十万’、‘百万’、‘千万’显示为‘万’
remainder = 4;
}
return Math.round(number / Math.pow(10, remainder + mutiple - decimalDigit)) / Math.pow(10, decimalDigit) + '万';
} else {
return Math.round(number / Math.pow(10, mutiple - decimalDigit)) / Math.pow(10, decimalDigit);
}
}
export function addChineseUnit(number, decimalDigit) {
// var me = this;
decimalDigit = decimalDigit == null ? 2 : decimalDigit;
var integer = Math.floor(number);
console.log(integer);
// var digit = me.getDigit(integer);
var digit = getDigit(integer);
// ['个', '十', '百', '千', '万', '十万', '百万', '千万'];
var unit = [];
if (digit > 3) {
var multiple = Math.floor(digit / 8);
if (multiple >= 1) {
var tmp = Math.round(integer / Math.pow(10, 8 * multiple));
// unit.push(me.addWan(tmp, number, 8 * multiple, decimalDigit));
unit.push(addWan(tmp, number, 8 * multiple, decimalDigit));
for (var i = 0; i < multiple; i++) {
unit.push('亿');
}
return unit.join('');
} else {
// return me.addWan(integer, number, 0, decimalDigit);
return addWan(integer, number, 0, decimalDigit);
}
} else {
return number;
}
}
let filters = {
getDigit,
addWan,
addChineseUnit
}
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
export default filters
- JS 格式化金钱单位并带上 K、M等单位
import Vue from 'vue'
export function addChineseUnit(num, digits) {
digits = digits == null ? 2 : digits
const si = [
{ value: 1, symbol: "" },
{ value: 1E3, symbol: "K" },
{ value: 1E6, symbol: "M" },
{ value: 1E9, symbol: "B" },
{ value: 1E12, symbol: "T" },
{ value: 1E15, symbol: "P" },
{ value: 1E18, symbol: "E" }
];
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
let i;
for (i = si.length - 1; i > 0; i--) {
if (num >= si[i].value) {
break;
}
}
if (num < 1000) {
return Number(num).toFixed(digits)
}
return (num / si[i].value).toFixed(digits).replace(rx, "$1") + si[i].symbol;
}
let filters = {
addChineseUnit
}
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
export default filters
【注】:正则真的很强大