Удалите последние символы из строки в С#. Элегантный способ?

У меня есть числовая строка, подобная этой 2223,00. Я хотел бы преобразовать его в 2223. Это: без после ,. Предположим, что после "," будет только два десятичных знака.

Я сделал:

str = str.Remove(str.Length - 3, 3);

Есть ли более элегантное решение? Может быть, с помощью другой функции? -Я не хочу помещать явные числа -

Ответ 1

Фактически вы можете просто использовать перегрузку Remove, которая принимает один параметр:

str = str.Remove(str.Length - 3);

Однако, если вы пытаетесь избежать жесткого кодирования длины, вы можете использовать:

str = str.Remove(str.IndexOf(','));

Ответ 2

Возможно, это:

str = str.Split(",").First();

Ответ 3

Это вернет вам строку, исключающую все после запятой

str = str.Substring(0, str.IndexOf(','));

Конечно, это предполагает, что ваша строка фактически имеет запятую с десятичными знаками. Вышеприведенный код не удастся, если он этого не сделает. Вы хотите сделать больше проверок:

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

Я предполагаю, что вы работаете со строкой для начала. В идеале, если вы работаете с номером, начиная с float или double, вы можете просто передать его в int, а затем myInt.ToString():

myInt = (int)double.Parse(myString)

Это анализирует двойной, используя текущую культуру (здесь, в США, мы используем . для десятичных точек). Однако это снова предполагает, что ваша строка ввода может быть проанализирована.

Ответ 4

String.Format("{0:0}", 123.4567);      // "123"

Если ваше начальное значение является десятичной в строке, вам нужно будет преобразовать

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

В этом примере я выбираю инвариантную культуру, но вы можете использовать ту, которая вам нужна.

Я предпочитаю использовать функцию форматирования, потому что вы никогда не знаете, может ли десятичное число содержать 2 или 3 ведущих числа в будущем.

Изменить: вы также можете использовать Truncate, чтобы удалить все после или.

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));

Ответ 5

Использование:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

Я предпочитаю метод расширения по двум причинам:

  • Я могу связать его с Подстрокой. Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  • Скорость.

Ответ 6

Вы можете использовать TrimEnd. Он эффективен и выглядит чисто.

"Name,".TrimEnd(',');

Ответ 7

Попробуйте следующее. Это сработало для меня:

str = str.Split(',').Last();

Ответ 8

Вы можете использовать LastIndexOf и Substring, чтобы получить все символы слева от последнего индекса запятой внутри sting.

string var = var.Substring(0, var.LastIndexOf(','));

Ответ 9

Использовать lastIndexOf. Как:

string var = var.lastIndexOf(',');