這個例子我寫得非常爛,拿出來就是要鞭策自己加把勁,不懂的東西太多了。
題目的要求是按金融慣例格式化數字。首先是只保留小數點后兩位,注意這里不進位,而是直接去掉多余的小數部分(你現在明白銀行是罪惡的了吧)
。然后是整數部分每隔三位就加入一個逗號,方便閱讀大數字。幾個例子:
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一樣的代碼。