Удалите последние символы из строки в С#. Элегантный способ?
У меня есть числовая строка, подобная этой 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(',');