我需要将数字转换为输出字符串格式。我需要设置一些小数,小数分隔符和千位分隔符。
我已经有了这样的功能:
function (number, decimals, decPoint, thousandsSep) {
var i, j, kw, kd, km;
if (isNaN(decimals = Math.abs(decimals))) {
decimals = 2;
}
if (decPoint == undefined) {
decPoint = ",";
}
if (thousandsSep == undefined) {
thousandsSep = "";
}
var sign = number 3) {
j = j % 3;
} else {
j = 0;
}
km = (j ? i.substr(0, j) + thousandsSep : "");
kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousandsSep);
kd = (decimals ? dec_point + Math.abs(number - (sign + i)).toFixed(decimals).replace(/-/, 0).slice(2) : "");
return sign + km + kw + kd;
}
但我需要知道,有更快或更简单的方法吗?
答案 0 :(得分:0)
除了safari number.toLocaleString()
之外,所有浏览器都有一种更简单的方法。对于safari,你可以使用你的函数和toLocaleString()
用于chrome firefox和ie
答案 1 :(得分:0)
这是我解决问题的方法。
function transform(number, decimals, decPoint, thousandsSep) {
var splitted = Math.abs(number).toFixed(isNaN(decimals) ? 2 : +decimals).split('.'),
getSignPart = function (number) {
return number < 0 ? ['-'] : [];
},
getIntPart = function (intPartStr, thousandsSep) {
var res = intPartStr.split(''), idx;
for (idx = intPartStr.length - 3; idx > 0; idx -= 3) {
res.splice(idx, 0, thousandsSep);
}
return res;
},
getDecPart = function (decPartStr, decPoint) {
return decPartStr ? [decPoint, decPartStr] : [];
};
return getSignPart(number)
.concat(getIntPart(splitted[0], thousandsSep || ''))
.concat(getDecPart(splitted[1], decPoint || ','))
.join('');
}
首先,我将字符串中的数字转换为所需的小数位数(如果未指定,则默认为2)。在js中,.
是小数的默认分隔符,因此我使用.
进行拆分以获取数字的整数/小数部分。然后,我每3个数字添加千位分隔符(默认为''
)并添加decimalSeparator(如果需要,则默认为,
)。
希望它有所帮助。
答案 2 :(得分:0)
我会使用toFixed将数字转换为具有所需小数的字符串
将千位分隔符从右边放入数字,分成3个分组的数组,
最后把所有东西连在一起:
var num = 1234567.543;
function formatNum(n,decimals,tSep,dSep){
if(isNaN(n)) return;
var r = n.toFixed(decimals || 0)
var dec = r.match(/\.[0-9]*$/) ? ((dSep || '.') + r.match(/(?!\.)[0-9]*$/)[0]) : '';
var int = Math.floor(n).toString() //if you use this for negative numbers use truncation (n | 0) instead of Math.floor(n)
var intSep = int.split('').reduceRight((ac, x) => {
if (!ac[0] || ac[0].length === 3)
ac.unshift([x]);
else
ac[0].unshift(x);
return ac
},[])
.map(x => x.join(''))
.join(tSep || '')
return intSep + dec;
}
console.log(
formatNum(num, 2,"'",",")
)