Отформатируйте число как 2,5 КБ, если тысяча или больше, в противном случае 900

Мне нужно показать значение валюты в формате 1 КБ, равное одной тысяче, или 1,1 К, 1,2 K, 1.9K и т. Д., Если это не четные тысячи, иначе, если меньше тысячи, отобразить нормальные 500, 100, 250 и т. Д., Используя javascript для форматирования числа?

128
задан Salman A 20 September 2018 в 22:13
поделиться

2 ответа

Я придумал очень, код играл в гольф один, и это очень коротко!

var beautify=n=>((Math.log10(n)/3|0)==0)?n:Number((n/Math.pow(10,(Math.log10(n)/3|0)*3)).toFixed(1))+["","K","M","B","T",][Math.log10(n)/3|0];

console.log(beautify(1000))
console.log(beautify(10000000))
0
ответ дан 24 November 2019 в 00:34
поделиться

Далее улучшая Ответ Salman из-за случаев как nFormatter (999999,1), который возвращает 1000K.

function formatNumberWithMetricPrefix(num, digits = 1) {
  const si = [
    {value: 1e18, symbol: 'E'},
    {value: 1e15, symbol: 'P'},
    {value: 1e12, symbol: 'T'},
    {value: 1e9, symbol: 'G'},
    {value: 1e6, symbol: 'M'},
    {value: 1e3, symbol: 'k'},
    {value: 0, symbol: ''},
  ];
  const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
  function divideNum(divider) {
    return (num / (divider || 1)).toFixed(digits);
  }

  let i = si.findIndex(({value}) => num >= value);
  if (+divideNum(si[i].value) >= 1e3 && si[i - 1]) {
    i -= 1;
  }
  const {value, symbol} = si[i];
  return divideNum(value).replace(rx, '$1') + symbol;
}
0
ответ дан 24 November 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: