Быстрый перевод части строки в число - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем! Столкнулся с необходимостью быстрого преобразования

части строки в число

, т.е. нужно это сделать

без выделения памяти в куче

(создания новых строк) и максимально быстро. Необходимость не грузить сборщик мусора возникла не на пустом месте - это было выявлено профайлерами. Пока написал свой велосипед через unsafe с указателями и прочим весельем, но хочу поинтересоваться - есть ли у кого нибудь метод получше? Нужно что-то типа этого:
float number = FloatParsePartOfString(someString, fromChar, length);
или даже так
int floatCount = FindAllFloats(someString, floatArrayOutputBuffer, separator);
Я пытался рефлектором добраться до недр стандартного float.TryParse, чтобы допилить, но наткнулся на уход в неуправляемый код

Решение задачи: «Быстрый перевод части строки в число»

textual
Листинг программы
            var str = "abc 12321,456987 def";
            double result = 0;
            int denom = 1;
            bool isFract = false;
            for(int i = 4; i < 16; i++)
            {
                if(isFract) denom *= 10;
                if((str[i] == '.' || str[i] == ',') && !isFract)
                {
                    isFract = true;
                    continue;
                }
                result = 10 * result + (str[i] - '0');
            }
            result /= denom;
            Console.WriteLine(result);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы