2011-12-20 100 views
4

我可以通过查看字符串的最后一个字符并基于将它发送到特定函数进行转换,从而在一系列步骤中完成此操作。但我只是想知道是否有更简单的方法来做到以下几点。以特殊字符结尾的C#字符串到整数

例如我有一个字符串,可能会说类似23.44M或5.23B,M和B显然代表“百万”或“十亿”,我想将该字符串转换为它所代表的数字,但只是不确定最有效的方式来做到这一点。寻找一些想法。由于

+1

有一个在.NET中没有内置功能实现这一点。你描述的方法听起来很合理。 – dtb 2011-12-20 16:27:33

+1

阅读字符串中的最后一个字符,删除字符,然后猫你真正想要的 – 2011-12-20 16:28:11

+0

你可以编写自己的Switch/Case语句和自定义方法来轻松处理这个 – MethodMan 2011-12-20 16:30:37

回答

0
/// <summary> 
/// Gets the value. 
/// </summary> 
/// <param name="number">The number.</param> 
/// <returns></returns> 
public static decimal GetValue(string number) 
{ 
    char unit = number.Last(); 
    string num = number.Remove(number.Length - 1, 1); 

    decimal multiplier; 
    switch (unit) 
    { 
     case 'M': 
     case 'm': 
      multiplier = 1000000; break; 

     default: 
      multiplier = 1; break; 
    } 

    return decimal.Parse(num) * multiplier; 
} 
+0

感谢所有的好评。这个方法在这里很好用! – Ron 2011-12-20 17:38:16

+0

@Ron如果你接受了其中的一种解决方案,那就太好了。 – Strillo 2011-12-20 17:54:48

0

你最好的选择可能是使用正则表达式(MSDN docs here),你可以在组(这不是正则表达式语法)[编号] [字符] 那么你有2组,第一个是你的电话号码,第二将是你的“因素”字符

然后,将第一个转换为double.TryParse(),然后运行第二个转换器或一组if语句以根据需要进行乘法运算以获得最终结果。

6

我会构建一个Dictionary,并用键值对(例如(B,1,000,000,000)和(M,1,000,000))填充它。把角色放在最后,查找那个角色的值,然后相乘。

1

沿着这些线路的东西适合你吗?

double num = Double.parse(inputStr.Remove(inputStr.Count-1)); 
char lastChar = inputStr.Last(); 
switch(lastChar) 
{ 
    case 'M': 
     num *= 1000000; 
     break; 
    case 'B': 
     num *= 1000000000; 
     break; 
} 

如果您的输入格式可能会有所不同,您将不得不添加额外的逻辑,包括防止非法的Parse()。

0

作为一个书呆子替代由@Smelch答案,你可以填写一个字符串常量后缀,如“xHKxxMxxBxxTxxQ”和Math.Pow(10乘以你的基地,POSTFIXES.LastIndexOf(...)+ 1)

0

使用字典来字符映射到乘法器,而不是一个switch语句,并且只使用大写:

public static decimal GetValue(string number) 
{ 
    return decimal.Parse(number.Remove(number.Length - 1, 1)) * _multipliers[number.Last().ToUpper()]; 
}