У меня есть такая числовая строка 2223,00
. Я хотел бы преобразовать его в 2223
. Это: без информации после " , ". Предположим, что после " , " будет только два десятичных знака .
Я сделал:
str = str.Remove(str.Length - 3, 3);
Есть ли более элегантное решение? Может использовать другую функцию? -Я не люблю указывать явные числа-
,
всегда находится в позиции -3, то первое решение все еще в порядке, но преждевременная оптимизация - ужасная вещь, на которую можно тратить время.Возможно это:
str = str.Split(",").First();
источник
2
для,Split
потому что вам не нужны дальнейшие запятые.Это вернет вам строку, исключая все после запятой
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)
источник
Вы можете использовать LastIndexOf и Substring вместе, чтобы получить все символы слева от последнего индекса запятой в строке.
строка var = var.Substring (0, var.LastIndexOf (','));
источник
Вы можете использовать
TrimEnd
. Он также эффективен и выглядит чистым."Name,".TrimEnd(',');
источник
"123,45".TrimEnd(',')
вернет «123,45».Remove last characters from a string if this character is...
Просто мне подходит. Оценил."oppa/ ".Trim().TrimEnd('/');
Попробуйте следующее. У меня сработало:
str = str.Split(',').Last();
источник
Используйте lastIndexOf. Подобно:
string var = var.lastIndexOf(',');
источник