Используя 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
вроде опечатка.