Мне нужно суммировать большой набор данных, но значения вводятся как K или M. Есть ли способ изменить их, преобразовать их в числовые значения? Я думал об использовании поиска и замены, чтобы изменить M на 000000, но это не будет работать для таких значений, как 1,25M. Есть ли простое решение для этого? Спасибо!
2 ответа
Предполагая, что значения находятся в столбце (столбец A в этом примере), добавьте второй столбец с этой формулой и заполните, чтобы соответствовать значениям, которые необходимо преобразовать:
=IFNA(LEFT(A1,LEN(A1)-1)*CHOOSE(MATCH(RIGHT(A1,1),{"K","M"},0),1000,1000000),A1)
Формула ищет "K" или "M" с MATCH(RIGHT(A1,1),{"K","M"},0)
, который возвращает 1 для "K" или 2 для "M". Функция CHOOSE
возвращает 1,000 или 1,000,000, которые умножаются на LEFT(A1,LEN(A1)-1)
. Функция LEFT
удаляет "K" или "M".
Что произойдет, если значение не заканчивается на "K" или "M"? В этих случаях MATCH
возвращает #NA, а IFNA
возвращает значение без изменений. Формула преобразует положительные и отрицательные значения, а также значения с десятичными знаками (например, 1,25M преобразуется в 1 250 000).
Этот же метод легко расширяется для преобразования миллиардов (1 000 000 000):
=IFNA(LEFT(A1,LEN(A1)-1)*CHOOSE(MATCH(RIGHT(A1,1),{"K","M","B"},0),1000,1000000,1000000000),A1)
образец кода открытого класса {
public static void main(String[] args) {
String str = "257K";
try {
Integer num = Integer.parseInt(str);
System.out.println(str);
} catch (Exception e) {
char type = str.charAt(str.length() - 1);
Integer num = Integer.parseInt(str.substring(0, str.length() - 1));
switch (type) {
case 'K':
System.out.println(num * 1000);
break;
case 'M':
System.out.println(num * 1000000);
break;
}
}
}
}