结尾带有特定字符的C#字符串转换为整数

结尾带有特定字符的C#字符串转换为整数,c#,string,biginteger,C#,String,Biginteger,我可以通过查看字符串的最后一个字符,并根据它的内容将其发送到特定函数进行转换,通过一系列步骤来完成这项工作。但是我只是想知道是否有更简单的方法来做下面的事情 例如,我有一个字符串,可能是23.44M或5.23B,M和B显然代表“百万”或“十亿”,我想把这个字符串转换成它所代表的数字,但不确定最有效的方法。寻找一些想法。谢谢您的最佳选择可能是使用您可以分组的正则表达式()(这不是正则表达式语法)[numbers][char] 然后你有两组,第一组是你的数字,第二组是你的“因子”字符 然后,使用do

我可以通过查看字符串的最后一个字符,并根据它的内容将其发送到特定函数进行转换,通过一系列步骤来完成这项工作。但是我只是想知道是否有更简单的方法来做下面的事情


例如,我有一个字符串,可能是23.44M或5.23B,M和B显然代表“百万”或“十亿”,我想把这个字符串转换成它所代表的数字,但不确定最有效的方法。寻找一些想法。谢谢

您的最佳选择可能是使用您可以分组的正则表达式()(这不是正则表达式语法)[numbers][char] 然后你有两组,第一组是你的数字,第二组是你的“因子”字符


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

我将构建一个字典,并用(B,100000000)和(M,1000000)等键值对填充它。将字符从末尾取下,查找该字符的值,然后相乘。

沿着这些线的某些内容适合您吗

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;
}
如果输入的格式可能不同,则必须添加其他逻辑,包括防止非法解析() ///获取值。 /// ///号码。 /// 公共静态十进制GetValue(字符串编号) { 字符单位=number.Last(); string num=number.Remove(number.Length-1,1); 十进制乘法器; 开关(单位) { 案例“M”: 案例“m”: 乘数=1000000;中断; 违约: 乘数=1;中断; } 返回decimal.Parse(num)*乘数; }
作为@Smelch答案的一个令人讨厌的替代方法,您可以填充字符串常量后缀,例如“xhkxxmxbxxtxq”,然后将基数乘以Math.Pow(10,postfix.LastIndexOf(…)+1)

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

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

NET中没有实现此功能的内置函数。您描述的方法听起来很合理。读取字符串中的最后一个字符,删除该字符,然后单击您真正想要的内容。您可以编写自己的Switch/Case语句和自定义方法来轻松处理此问题。您仅有的后缀有数百万个吗?字符串中是否可以有其他字符(例如空格)?最后,您将编写的方法将主要取决于输入字符串上的约束是什么。感谢所有出色的响应。这个方法在这里非常有效@如果你接受其中一个解决方案,罗恩会很高兴的。
public static decimal GetValue(string number)
{
    return decimal.Parse(number.Remove(number.Length - 1, 1)) *  _multipliers[number.Last().ToUpper()];
}