Sebuah proyek baru-baru ini mengharuskan kita untuk memformat jumlah dalam seperseribu di bagian depan (yaitu, pisahkan setiap tiga digit dengan koma). Kode telah diubah. Versi sebelumnya adalah kesalahan saya. Saya benar-benar merasa kasihan pada semuanya! Modifikasi telah dilakukan sekarang. Jika masih ada kekurangan, mohon saran Anda!
1. Mendukung 0-9 digit yang dipisahkan koma.
Kode JS-nya seperti berikut:
Copy kode kodenya sebagai berikut:
/**
*Pemformatan JS
* @param number Nomor yang akan diformat
* @param d [0-9] dipisahkan dengan koma
*/
fungsi numFormat(angka,d) {
var angkaArrs = ['0','1','2','3','4','5','6','7','8','9'],
REG_NUMBER = /^/d+(./d+)?$/;
d = d ||3; // Jika tidak lolos, itu adalah 3 digit perseribu.
if(isNumber(angka) || isString(angka) || REG_NUMBER.test(angka)) {
//Konversikan ke string terlebih dahulu
var toString = angka + '',
isPoint = toString.indexOf('.'),
awalan, // awalan
akhiran, // akhiran
t = '';
jika(isPoint > 0) {
awalan = toString.substring(0,isPoint);
akhiran = toString.substring(isPoint + 1);
}lainnya jika(isPoint == 0) {
awalan = '';
akhiran = toString.substring(1);
}kalau tidak {
awalan = toString;
akhiran = '';
}
jika(awalan != '') {
prefixArr = awalan.split('').reverse();
var isArrayIndex = isArray(d,numArrs);
jika(isArrayIndex > -1) {
for(var i = 0, ilen = awalanArr.panjang; i < ilen; i+=1) {
t += prefixArr[i] + ((i + 1) % isArrayIndex == 0 && (i + 1) != prefixArr.length ? "," : "");
}
t = t.split("").reverse().join("");
if(akhiran != '') {
kembalikan t + "." + akhiran;
}kalau tidak {
kembali t;
}
}kalau tidak {
return 'Berapa digit yang dimasukkan salah';
}
}else if(awalan != '' && akhiran == ''){
kembalikan awalan;
}else if(awalan == '' && akhiran != ''){
awalan = 0;
kembalikan awalan + akhiran;
}kalau tidak {
kembali "Ada kesalahan";
}
}kalau tidak {
return 'Nomor yang dimasukkan untuk diformat tidak sesuai';
}
}
fungsi isArray(item,arrs) {
for(var i = 0, ilen = arrs.length; i < ilen; i++) {
if(item == arrs[i]) {
kembalikan saya;
}
}
kembali -1;
}
fungsi isNumber(angka) {
return Object.prototype.toString.apply(number) === '[Nomor objek]';
}
fungsi isString(angka) {
return Object.prototype.toString.apply(angka) === ['String objek'];
}
Tapi sepertinya ada ketidaksempurnaan. Saya memanggil console.log(numFormat("1111.00")); dan langsung menghasilkan 1,111 bukannya 1,111.00 di konsol itu. Jatuhkan 0 terakhir dan semuanya normal! Saya telah mengujinya dan pada dasarnya memenuhi persyaratan. Jika ada ketidaksempurnaan, mohon beri saya saran Anda!