Удалить последние символы из строки в C#. Элегантный способ?
у меня есть строка вроде этой 2223,00
. Я хотел бы преобразовать его в 2223
. Это: без информации после",". Предположим, что останется только два десятичных знаков после ",".
Я:
str = str.Remove(str.Length - 3, 3);
есть ли более элегантное решение? Может быть с помощью другой функции? -Я не люблю ставить явные цифры -
9 ответов:
вы можете просто использовать удалить перегрузку, которая принимает один параметр:
str = str.Remove(str.Length - 3);
однако, если вы пытаетесь избежать жесткого кодирования длины, вы можете использовать:
str = str.Remove(str.IndexOf(','));
это вернет вам строку, исключающую все после запятой
str = str.Substring(0, str.IndexOf(','));
конечно, это предполагает ваша строка на самом деле имеет запятую с десятичными знаками. Приведенный выше код будет ошибкой, если он не. Вы хотите сделать больше проверок:
commaPos = str.IndexOf(','); if(commaPos != -1) str = str.Substring(0, commaPos)
Я предполагаю, что вы работаете со строкой для начала. В идеале, если вы работаете с числом для начала, как поплавок или двойной, вы можете просто бросить его в
int
, то лиmyInt.ToString()
например:myInt = (int)double.Parse(myString)
это анализирует двойной, используя текущую культуру (здесь, в США, мы используем
.
для десятичной точки). Однако это снова предполагает, что ваша входная строка может быть проанализирована.
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")));
использование:
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)