这个例子我写得非常烂,拿出来就是要鞭策自己加把劲,不懂的东西太多了。
题目的要求是按金融惯例格式化数字。首先是只保留小数点后两位,注意这里不进位,而是直接去掉多余的小数部分(你现在明白银行是罪恶的了吧)
。然后是整数部分每隔三位就加入一个逗号,方便阅读大数字。几个例子:
2546.2562 --> '2,546.25'
1500.342626 --> '1,500.34'
100.2034 --> '100.2'
我的实现方法过于惨不忍睹,实在不忍直视:
var numberToMoney = function(n) {
val = n.toString().split('.');
var decimalPart = val[1].substr(0, 2);
if ( (+decimalPart)%10 === 0 ) {
decimalPart = decimalPart.substr(0, decimalPart.length-1);
}
var integerPart = val[0].split('');
for (var i = integerPart.length -3; i > 0; i -= 3) {
integerPart.splice(i, 0, ',');
}
integerPart = integerPart.join('');
return integerPart + '.' + decimalPart;
};
实在不想点评了……就让代码随风吧。
这里放一个高票答案:
function numberToMoney(n) {
return String(Math.floor(n * 100) / 100).replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
跟这个比起来我写的就是一坨shit啊一坨shit。
首先用Math.floor(n * 100) / 100)
来去掉小数部分多余的位数。注意如果需要进位的话可以用一个内置方法number.toFixed(n)
。然后一个正则直接插入逗号。
这个题目提醒了我正则的强大,不认真学一学的话就只能写出跟shit一样的代码。
网友评论