2


0

JavaScriptで大きな数値を大きな係数に変換する

私はカウンターを持っていて、時には非常に大きな数を得ることができるので、次のように数を変換する必要があります:

1300 => 1.3K
1000000 => 1M

等々。 JavaScriptでこれはどのように可能ですか?

5 Answer


4


// Truncate a number to ind decimal places
function truncNb(Nb, ind) {
  var _nb = Nb * (Math.pow(10,ind));
  _nb = Math.floor(_nb);
  _nb = _nb / (Math.pow(10,ind));
  return _nb;
}
// convert a big number to k,M,G
function int2roundKMG(val) {
  var _str = "";
  if (val >= 1e9)        { _str = truncNb((val/1e9), 1) + ' G';
  } else if (val >= 1e6) { _str = truncNb((val/1e6), 1) + ' M';
  } else if (val >= 1e3) { _str = truncNb((val/1e3), 1) + ' k';
  } else { _str = parseInt(val);
  }
  return _str;
}


1


バイトサイズを短縮してラベル付けするものを探しているときに気の利いたコードを選びました(例: 1024バイト→ "1 KB")、ニーズに合わせて少し変更しました(1000→ "1 K")。

function abbreviate_number(num) {
  var sizes = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
  if (num < 1000) return num;
  var i = parseInt(Math.floor(Math.log(num) / Math.log(1000)));
  return ((i == 0) ? (num / Math.pow(1000, i)) : (num / Math.pow(1000, i)).toFixed(1)) + ' ' + sizes[i]; // use .round() in place of .toFixed if you don't want the decimal
};

参考までに、ここに必要なものを示します。

function format_bytes(bytes) {
  var sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
  if (bytes == 0) return '';
  if (bytes == 1) return '1 Byte';
  var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  return ((i == 0)? (bytes / Math.pow(1024, i)) : (bytes / Math.pow(1024, i)).toFixed(1)) + ' ' + sizes[i];
};


0


擬似コード

factor = 0;
while (value > 1000) {
  value = value/1000;
  factor++;
}
output value (you might perhaps limit output to 3 decimal places)
convert factor to unit and output (0 = none, 1 = K, 2 = M, 3 = G...)


0


古典的なカスケード型の数値フォーマッタを使用するだけでいい

function format_num(num) {
  if( num < 1000 )
    return num;
  else if( num < 1000000 )
    return parseInt(num / 1000) + "K";
  else if( num < 1000000000 )
    return parseInt(num / 1000000) + "M";
  //....
}

適切に丸める必要があります。


0


私はそれを行うきれいな方法を探していたときにこれらの答えに遅れましたが、念のためにここでそれを行う角度フィルターを貼り付けるコピーを探している場合は私のものです。 上記の応答と同じロジック:)

001234`を確認するために、 1k`を返します

html:

{{d | KGMPformat}}

js:

// controller:
$scope.data = [123,12345,1234567,12345678,12345678901]
// filter:
(function(app) {
    app.filter('KGMPformat', function() {
        return function(value) {
            if (value<1e3)  return value;
            if (value<1e6)  return (value - value%1e3)/1e3 + "K";
            if (value<1e9)  return (value - value%1e6)/1e6 + "G";
            if (value<1e12) return (value - value%1e9)/1e9 + "M";
            if (value<1e15) return (value - value%1e12)/1e12 + "P";
            return value;
        };
    });
})(myApp);