C#字符串,在结尾为整数时具有特定字符

时间:2011-12-20 16:25:13

标签: c# string biginteger

我可以通过查看字符串的最后一个字符并根据它发送到特定函数以进行转换的内容,在一系列步骤中执行此操作。但我只是想知道是否有更简单的方法来执行以下操作。

例如,我有一个字符串,可能会说23.44M或5.23B,M和B显然代表“百万”或“十亿”,我想将该字符串转换为它代表的数字,但不是确保最有效的方法。寻找一些想法。感谢

6 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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()。

答案 2 :(得分:0)

你最好的选择可能是使用你可以分组的正则表达式(MSDN docs here)(这不是正则表达式语法)[数字] [字符] 然后你有两组,第一组是你的号码,第二组是你的“因素”字符

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

答案 3 :(得分: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;
}

答案 4 :(得分:0)

作为@Smelch答案的书呆子替代方法,你可以填充一个字符串常量POSTFIXES,例如“xHKxxMxxBxxTxxQ”,并将你的基数乘以Math.Pow(10,POSTFIXES.LastIndexOf(...)+ 1)

答案 5 :(得分:0)

使用字典将字符映射到乘数而不是switch语句,并仅使用大写:

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