98 votes

Convertir un nombre long en chaîne de caractères abrégée en JavaScript, avec une exigence spéciale de brièveté

En JavaScript, comment peut-on écrire une fonction qui convertit un [edit : nombre entier positif (moins de 100 milliards) en une abréviation de 3 lettres - où 0-9 et a-z/A-Z comptent comme une lettre, mais pas le point (qui est si minuscule dans de nombreuses polices proportionnelles), qui serait ignoré en termes de limite de lettres ?

Cette question est liée à ce fil utile mais ce n'est pas la même chose ; par exemple, là où cette fonction ferait par exemple "123456 -> 1.23k" ("123.5k" étant 5 lettres), je cherche quelque chose qui fasse "123456 -> 0.1m" ("0[..]1m" étant 3 lettres). Par exemple, ce serait la sortie de la fonction espérée (valeur de retour originale à gauche, idéale à droite) :

0                      "0"
12                    "12"
123                  "123"
1234                "1.2k"
12345                "12k"
123456              "0.1m"
1234567             "1.2m"
12345678             "12m"
123456789           "0.1b"
1234567899          "1.2b"
12345678999          "12b"

Merci !

Mise à jour : Merci ! Une réponse a été apportée et fonctionne conformément aux exigences lorsque les modifications suivantes sont apportées :

function abbreviateNumber(value) {
    var newValue = value;
    if (value >= 1000) {
        var suffixes = ["", "k", "m", "b","t"];
        var suffixNum = Math.floor( (""+value).length/3 );
        var shortValue = '';
        for (var precision = 2; precision >= 1; precision--) {
            shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
            var dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
            if (dotLessShortValue.length <= 2) { break; }
        }
        if (shortValue % 1 != 0)  shortValue = shortValue.toFixed(1);
        newValue = shortValue+suffixes[suffixNum];
    }
    return newValue;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X