Rumah > Soal Jawab > teks badan
Sebagai contoh, 234234 menjadi 234,234 Mencari pelaksanaan rekursif, lebih sedikit kod, lebih baik.
PHP中文网2017-05-19 10:38:04
Saya rasa anda mahu merealisasikan paparan digit nombor Anda mahu "12345" dipaparkan sebagai "12,345" dan bukannya "123,45".
Penyelesaian yang diberikan oleh sesetengah orang ialah nombor "123456" akan dikeluarkan sebagai ",123,456", yang jelas mempunyai koma tambahan kaedah saya tidak akan mempunyai masalah ini.
1L (gunakan NumberObject.toLocaleString()
, tukar nombor kepada rentetan, dan gunakan turutan format nombor tempatan.) boleh menyelesaikan masalah, tetapi ia tidak disyorkan kerana ia bergantung pada pilihan tempatan anda dan hasilnya mungkin berbeza untuk orang yang berbeza.
Juga menyokong titik perpuluhan!
"12345".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //输出 12,345
"123456789".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //输出 123,456,789
"1234567.89".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //输出 1,234,567.89
Soalan ini memerlukan pelaksanaan rekursif, jadi jawapannya juga menyediakan pelaksanaan rekursif.
//只处理整数
function addComma(str, currentIndex, result) {
if (currentIndex === undefined) {
currentIndex = str.length - 1;
}
if (result === undefined) {
result = '';
}
if (currentIndex < 0) {
return result;
}
result = str.charAt(currentIndex) + result;
if ((str.length - currentIndex) % 3 == 0 && currentIndex != 0) {
result = "," + result;
}
return addComma(str, currentIndex - 1, result);
}
var n = '123456';
var output = addComma(n);
console.log(output); //输出123,456
//带小数的处理示例
var n = '123456.78';
var output = addComma(n.split('.')[0]) + '.' + n.split('.')[1];
console.log(output); // 输出 123,456.78
高洛峰2017-05-19 10:38:04
Yang kat atas lagi best
function get(num) {
num = num.split('').reverse().join('')
return num.match(/\d{1,3}/g).join(',').split('').reverse().join('')
}
阿神2017-05-19 10:38:04
function addComma(str) {
if(str.length <= 3) {
return str;
}
var res = str.split("");
var resStr = res.splice(0, 3);
return resStr.join("") + "," + addComma(res.join(""));
}
伊谢尔伦2017-05-19 10:38:04
'2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3
Kod terpendek ada di sini, mari lihat jika ada yang lebih pendek.
PHP中文网2017-05-19 10:38:04
Dari kiri ke kanan
function myFunc(str) {
return str.split('').reverse().join('').replace(/\B(?=(?:\d{3})+\b)/g, ',').split('').reverse().join('')
}
Dari kanan ke kiri
function myFunc(str) {
return str.replace(/\B(?=(?:\d{3})+\b)/g, ',')
}
我想大声告诉你2017-05-19 10:38:04
(234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
Seseorang bertanya soalan ini beberapa hari yang lalu /q/10...
Walau bagaimanapun, kaedah di atas tidak sesuai untuk titik perpuluhan Memandangkan js tidak menyokong prasemakan terbalik, gunakan satu set peraturan biasa untuk titik perpuluhan.
(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")
Dan apa itu rekursi Anda tidak perlu menggunakan rekursi untuk ini, bukan?PHPz2017-05-19 10:38:04
comdify : function (n){
var re=/\d{1,3}(?=(\d{3})+$)/g;
var n1 = String(n).replace(/^(\d+)((\.\d+)?)$/,function(s,s1,s2){return s1.replace(re,"$&,")+s2;});
return n1;
}