Проще всего использовать регулярные выражения, если это допустимо:
string value = "ab+0.1973-1.1";
string result = Regex.Replace(value, @"(\.\d{2})\d+", "$1");
Если использовать цикл, то нужно создавать новую строку, но вместо
string лучше использовать
StringBuilder, т.к. при добавлении данных к
string строка постоянно будет пересоздаваться, что в конечном итоге может негативно отразиться на производительности:
string inputString = "ab+0.1973-1.1";
var result = new StringBuilder();
bool hasDot = false;
int digits = 0;
foreach(char ch in inputString)
{
if (char.IsDigit(ch) && hasDot)
{
digits++;
}
else
{
digits = 0;
hasDot = (ch == '.');
}
if (digits <= 2)
{
result.Append(ch);
}
}
Console.WriteLine(result.ToString());
Если хорошо подумать и если это допустимо, то задачу можно решить с одним только
StringBuilder (одним экземпляром), в котором изначально будет строка для обработки, используя метод
Remove для удаления ненужных данных. При такой реализации, будет использоваться цикл
for.