Преобразование длинного числа в сокращенную строку в JavaScript с особым требованием краткости

В JavaScript, как написать функцию, которая преобразует данный [edit:positive integer] число (менее 100 миллиардов) в трехбуквенное сокращение - где 0-9 и az / AZ считаются буквой, но точка (как она является крошечной во многих пропорциональных шрифтах) не будет и будет игнорируется лимит букв?

Этот вопрос связан сэта полезная тема, но это не то же самое; например, где эта функция будет поворачиваться, например, & quot; 123456 & gt; 1.23k & Quot; («123,5k», то есть 5 букв) Я ищу что-то, что делает «123456 - & gt; 0,1м & Quot; ("0 [.] 1 м", будучи 3 буквами). Например, это будет вывод ожидаемой функции (левый оригинал, правое идеальное возвращаемое значение):

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"

Спасибо!

Update: Thanks! An answer is in and works per the requirements when the following amendments are made:

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)  shortNum = shortValue.toFixed(1);
        newValue = shortValue+suffixes[suffixNum];
    }
    return newValue;
}

Ответы на вопрос(11)

Ваш ответ на вопрос