Используя NumeralJS, как я могу определить формат в зависимости от того, является ли число тысячами или миллионами

Мой заголовок в значительной степени подводит итог, в моем приложении я форматирую значение только тогда, когда значение больше 6 цифр. Когда значение равно тысячам, например 210500, я хочу отобразить его как 210,5 КБ, если значение исчисляется миллионами, например 2120000, я хочу отобразить его как 2,12 м. В настоящее время строка формата ('0,0.[00]a') будет отображать оба этих числа в обоих десятичных разрядах, но я бы хотел, чтобы это определялось на основе того, является ли значение тысячами или миллионы

Является ли лучший способ понять это, чтобы прокрутить значение до тех пор, пока не будет достигнуто десятичное число, а затем определить форматирование на основе этого числа? Я пытался использовать объект Custom Format, но мне трудно понять, что происходит под капотом.

Это значение отображается на карте и должно быть отформатировано, если в номере 6 и более цифр. Форматирование должно быть 1 десятичным знаком для значений в тысячах и 2 десятичными знаками для значений в миллионах (или больше).

Желаемые входы и выходы:

      210500 --> 210.5k
2120000 --> 2.12m
67500.89 --> 6.7k
6750000 --> 6.75m
16.75 --> 16.75
67530.85 --> 67.5k 
675 --> 675
6700.05 --> 6700
2522.25 --> 2522
      function formatValue(value: string | number, shorthandFormat: boolean = true, shorthandLength: number = 6) {
    if (value === undefined || value === null) return '?';

    let valueString = value.toString();

    if (valueString.trim() === '') return '';

    if (shorthandFormat) {
        if (!shorthandLength || shorthandLength < 0) {
            shorthandLength = 6;
        }

        if (valueString.length <= shorthandLength) {
            shorthandFormat = false;
        }
    }

    let numeralValue = numeral(value)

    let formatter = shorthandFormat ? '0,0.[0]a' : '0,0.[00]';

    let formattedValue = numeralValue.format(formatter);
    
    return formattedValue;
}

Запускаемый фрагмент:

1 ответ

В этом случае вам нужно будет использовать другую строку формата в зависимости от размера исходного числа. Похоже, у вас есть следующие случаи:

  • Если число меньше 1000, верните то же число в длинном формате, но не более чем с двумя десятичными знаками.
  • Если число находится в диапазоне от 1000 до 10 000, верните то же число в длинном формате без десятичных знаков.
  • Если число находится в диапазоне от 10 000 до 1 000 000, верните то же число в сокращенном формате, не более чем с одним десятичным знаком.
  • Если число больше 1 000 000, верните то же число в сокращенном формате, не более чем с двумя десятичными знаками.

Для каждого из этих случаев вам понадобится отдельная строка формата. Вы можете сделать это, сравнив число с каждым порогом и установив строку формата в зависимости от ее размера.


Примечание: Тест на количество67500.89был изменен, чтобы ожидать67.5kв результате, поскольку6.7kвроде опечатка.

Другие вопросы по тегам