En JavaScript, ¿cómo se escribiría una función que convierta un número dado [editar: entero positivo ] (por debajo de 100 mil millones) en una abreviatura de 3 letras, donde 0-9 y az / AZ cuentan como una letra, pero el punto (ya que es tan pequeño en muchas fuentes proporcionales) no lo haría, y sería ignorado en términos del límite de letras?
Esta pregunta está relacionada con este útil hilo , pero no es lo mismo; por ejemplo, dónde se convertiría esa función, por ejemplo, "123456 -> 1.23k" ("123.5k" son 5 letras). Estoy buscando algo que haga "123456 -> 0.1m" ("0 [.] 1m" sea de 3 letras ). Por ejemplo, este sería el resultado de la función esperada (original izquierdo, valor de retorno ideal derecho):
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"
¡Gracias!
Actualización: ¡Gracias! Hay una respuesta y funciona según los requisitos cuando se realizan las siguientes enmiendas:
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;
}