JavaScriptでは、特定の[編集:正の整数]の数値(1,000億未満)を3文字の省略形に変換する関数をどのように記述しますか。0-9とaz / AZは文字としてカウントされますが、ドットは(多くのプロポーショナルフォントでは非常に小さいので)そうではなく、文字制限の観点から無視されますか?
この質問はこの役立つスレッドに関連していますが、同じではありません。たとえば、その関数が変わる場合、たとえば「123456-> 1.23k」(「123.5k」は5文字)「123456-> 0.1m」(「0[。]1m」は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"
ありがとう!
更新:ありがとう!次の修正が行われると、答えが出て、要件に従って機能します。
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;
}