Bonjour,
dans mon sujet précédent j'avais pu solutionner ma question.

Allant davantage vers la finalisation de mon projet, je m'intéresse aujourd'hui à un séparateur de millier dans un nombre, afin que ce nombre soit mieux lisible :
483 957
l'est davantage que
483957

Exemple par l'image :

upload/1635519114-83754-bisous-2.png

J'ai la fonction .js millier(nbr) que j'intègre et qui s'exécute à chaque clic sur les différents like d'incrémentation.
<script>

window.addEventListener('DOMContentLoaded', () =>{
    document.querySelectorAll('#counterview a').forEach(($a, i) =>{
        $a.addEventListener('click', e=>{
            e.preventDefault();
            let xhr = new XMLHttpRequest();
            xhr.open("GET", $a.href, true);
            xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
            xhr.addEventListener('readystatechange', ev =>{
                if(xhr.readyState == 4 && xhr.status == 200) {
                    if(/^\d+$/.test(xhr.responseText)){
                    document.getElementById('result').textContent = xhr.responseText;
	let $audio = document.getElementById('audio');
	$audio.pause();
	$audio.src = `sons/b${i + 1}.mp3`;
	$audio.play();

	//À chaque clic, on récupère la nouvelle valeur de l'id="result"
	var valeur = res.innerHTML;
	//On exécute la fonction millier(nbr) pour un séparateur constant des milliers de l'id="result"
	millier(valeur);
                    }
                }
            });
            xhr.send();
        });
    });
});

	function millier(nbr)
{
var nombre = ''+nbr;
var retour = '';
var count=0;
for(var i=nombre.length-1 ; i>=0 ; i--)
	{
if(count!=0 && count % 3 == 0)
	retour = nombre[i]+' '+retour ;
else
	retour = nombre[i]+retour ;
	count++;
	}
res.innerHTML = retour;
return retour;
}

//À l'ouverture la page :
var res = document.getElementById('result');
var valeur = res.innerHTML;

//À l'ouverture la page :
millier(valeur);

</script>


Cela fonctionne vraiment bien (et je trouve ça plutôt sympa !), mais voici ma question : hormis une erreur que j'aurais commise (laquelle ?), pourquoi, à partir du million 1 000 000 le truc dérape complètement ?
Modifié par Gout-de-l-esprit (29 Oct 2021 - 17:10)
Hello

je sais pas pourquoi tu t'embete avec cette function..

let nombre = 21321654
nb = new Intl.NumberFormat().format(nombre);


nb te renvoi le bon format Smiley smile
Modifié par JENCAL (29 Oct 2021 - 17:25)
Meilleure solution
Bonjour Jencal,
oui ! en effet pourquoi donc je m'embêtais de la sorte :
...
                   document.getElementById('result').textContent = xhr.responseText;
	let $audio = document.getElementById('audio');
	$audio.pause();
	$audio.src = `sons/b${i + 1}.mp3`;
	$audio.play();

	//À chaque clic, on récupère la nouvelle valeur de l'id="result"
	let nombre = res.innerHTML;
	nb = new Intl.NumberFormat().format(nombre);
	res.innerHTML = nb;
                    }
                }
            });
            xhr.send();
        });
    });
});

//À l'ouverture de la page
var res = document.getElementById('result');

let nombre = res.innerHTML;
nb = new Intl.NumberFormat().format(nombre);

//Résultat : un séparateur s'impose !
res.innerHTML = nb;

</script>


Et ça marche parfaitement :
1. à l'ouverture de la page ;
2. à chaque incrémentation par clic.

Merci !

Je marque le sujet comme résolu.