Wie würde man in JavaScript eine Funktion schreiben, die eine bestimmte [edit: positive Ganzzahl ] -Zahl (unter 100 Milliarden) in eine 3-Buchstaben-Abkürzung umwandelt - wobei 0-9 und az / AZ als Buchstabe zählen, aber der Punkt (wie es in vielen proportionalen Schriftarten so klein ist) würde nicht und würde in Bezug auf die Buchstabenbegrenzung ignoriert werden?
Diese Frage bezieht sich auf diesen hilfreichen Thread , ist aber nicht dasselbe. Wenn diese Funktion beispielsweise "123456 -> 1,23 k" ("123,5 k" sind 5 Buchstaben) wird, suche ich nach etwas, das "123456 -> 0,1 m" ("0 [.] 1 m" bedeutet 3 Buchstaben) ). Dies wäre beispielsweise die Ausgabe der erhofften Funktion (linkes Original, rechter idealer Rückgabewert):
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"
Vielen Dank!
Update: Danke! Eine Antwort ist in und funktioniert gemäß den Anforderungen, wenn die folgenden Änderungen vorgenommen werden:
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;
}