我需要对一个大型数据集求和,但输入的值是 K 或 M。有没有办法将它们转换为数值?我原本想使用查找和替换将 M 更改为 000000,但对于 1.25M 这样的值,这种方法行不通。有没有简单的解决方案?谢谢!
答案1
假设值在一列中(此示例中为 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)
,对“K”返回 1,对“M”返回 2。函数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)
答案2
可以使用查找和替换功能,将“K”替换为“*10^3”,将“M”替换为“*10^6”,将“B”替换为“*10^9”。例如,1.25M 将转换为 1.25 * 10^6。然后,您只需要在公式前面添加一个等号即可。
答案3
公共类示例代码{
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;
}
}
}
}