Спасибо Годеке за ваши постоянно улучшающиеся правки.
Я закончил тем, что изменил параметры функции синтаксического анализа, чтобы взять символ [], а не строку, и использовал вашу базовую предпосылку, чтобы придумать следующее.
protected static float ParseFloatingPoint(char[] data)
{
int decimalPos = Array.IndexOf<char>(data, '.');
int posSignPos = Array.LastIndexOf<char>(data, '+');
int negSignPos = Array.LastIndexOf<char>(data, '-');
int signPos = (posSignPos > negSignPos) ? posSignPos : negSignPos;
string result;
if (signPos > decimalPos)
{
char[] newData = new char[data.Length + 1];
Array.Copy(data, newData, signPos);
newData[signPos] = 'E';
Array.Copy(data, signPos, newData, signPos + 1, data.Length - signPos);
result = new string(newData);
}
else
{
result = new string(data);
}
return float.Parse(result, NumberStyles.Float, CultureInfo.InvariantCulture);
}
Я изменил ввод для функции со строки на char [], потому что я хотел отойти от ReadLine (). Я предполагаю, что это будет работать лучше, чем создавать много строк. Вместо этого я получаю фиксированное количество байтов из файла данных (так как он ВСЕГДА будет иметь данные шириной 11 символов), преобразовывая byte [] в char [], а затем выполняя вышеуказанную обработку для преобразования в число с плавающей точкой.