Maison > Questions et réponses > le corps du texte
Par exemple, 234234 devient 234 234. En recherchant une implémentation récursive, moins il y a de code, mieux c'est.
PHP中文网2017-05-19 10:38:04
Je suppose que vous souhaitez réaliser l'affichage numérique des nombres. Vous souhaitez que "12345" soit affiché sous la forme "12,345" au lieu de "123,45". Certaines personnes se sont trompées.
La solution proposée par certaines personnes est que le nombre "123456" sera affiché sous la forme ",123,456", qui comporte évidemment une virgule supplémentaire. Ma méthode n'aura pas ce problème.
1L (utilisez NumberObject.toLocaleString()
, convertissez les nombres en chaînes et utilisez la séquence de format de nombre locale.) peut résoudre le problème, mais elle n'est pas recommandée car cela dépend de vos préférences locales et les résultats peuvent être différents selon les personnes.
Prend également en charge les points décimaux !
"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
Cette question nécessite une implémentation récursive, donc la réponse fournit également une implémentation récursive.
//只处理整数
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
Celui du dessus est meilleur
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
Le code le plus court est ici, voyons s'il y en a un plus court.
PHP中文网2017-05-19 10:38:04
De gauche à droite
function myFunc(str) {
return str.split('').reverse().join('').replace(/\B(?=(?:\d{3})+\b)/g, ',').split('').reverse().join('')
}
De droite à gauche
function myFunc(str) {
return str.replace(/\B(?=(?:\d{3})+\b)/g, ',')
}
我想大声告诉你2017-05-19 10:38:04
(234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
Quelqu'un a posé cette question il y a quelques jours /q/10...
Cependant, la méthode ci-dessus ne convient pas aux points décimaux. Étant donné que js ne prend pas en charge la pré-vérification inversée, utilisez un autre ensemble de règles régulières pour les points décimaux.
(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")
Et qu'est-ce que la récursivité ? Vous n'avez pas besoin d'utiliser la récursivité pour ça, n'est-ce pas ?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;
}