Сайт SPYRYTUS_LTD© SPYRYTUS - учеба, работа и развлечения title image
Новости :
    Software News
    Hardware News
Обзоры :
    Главная
    Алгоритмы
    Готовые программы
    Игры
Разработка :
    Свои разработки
    Продажа и заказ ПО
Развлечения :
    Отдохни !

Алгоритм преобразования строки в число c плавающей запятой

      Для преобразования строки в число с плавающей запятой, нужно помнить, что число складывается из целой, и дробной частей. Понадобется цикл от 0 до длины строки, где нужно поставить условие для отделения целой части от дробной. Для определения длины строки воспользуемся готовой функцией из библиотеки string.h, которая называется strlen. Затем записать наш цикл сложив все выше сказанное :

for (int i=0;i<strlen(Mas);i++)

      Организовываем переменную Dig целого типа, которая будет показывать сколько знаков после запятой, то есть будет показателем степени. А также переменные Do и Pos типа double, которые будут являтся числом до запятой, и числом после запятой соответственно и переменную целого типа flag, она будет указывать встречу с точкой, 1 - точка встретилась, 0 - точки небыло.
      Внутри цикла нужно поставить условие на то, что небыло точки :

if (Mas[i] != '.')

если условие истинное тогда проверяем переменную flag на 0. Если точки не встречалось, тогда нужно с нашей строки брать по одному символу Mas[i], и вычитать из полученного символа в шестнадцатиричном коде число 0x30. В таком случае получается : если элемент массива, было число 0x31 или в десятичной 49, что соответствует в реальности цифре "1", то при вычитании числа 0x30 из 0x31 или 48 из 49, мы получим чистую цифру 1.

if (flag == 0) Do = (Do+(Mas[i]-0x30))*10;

после того, как была встреча с точкой, переменную flag присваиваем 1

if (Mas[i] == '.') flag=1;

Теперь проверяем flag на 1, собираем числа после запятой и инкрементируем показатель степени Dig :

if (flag==1)
{
  Pos = (Pos+(Mas[i]-0x30))*10;
  Dig++;
}

      После выхода из цикла переменную Do нужно разделить на 10 и прибавить содержимое Pos, но при этом не забыв его разделить на 10 Dig. Для этого вам понадобится функция возведения в степень, ее можно написать вспомнив математику, а можно подключить библиотеку math.h и воспользоватся функцией pow.

return (Do/10)+(Pos/pow(10,Dig));

      Ниже приведенный код написан на язике "С++". Переделать его на другой язык, я думаю сложности не представит, т.к. код очень простой и работает без ошибок. Все преобразование заключается в функции которая называется StrToFloat.

double StrToFloat(char *Mas)
{
  int Dig=1;
  double Do=0, Pos=0, flag=0;
  for (unsigned i=0;i<strlen(Mas);i++)
  {
    if (Mas[i] != '.')
      {
        if (flag==0) Do = (Do+(Mas[i]-0x30))*10;
        if (flag==1)
        {
          Pos = (Pos+(Mas[i]-0x30))*10;
          Dig++;
        }
      }
    if (Mas[i]=='.') flag=1;
  }
  return (Do/10)+(Pos/pow(10,Dig));
}

      Готовый вариант программы сможете найти, щелкнув в навигационной панели ссылку Готовые программы.

 
  Перейти вверх страници ВВЕРХ Перейти вверх страници
Сайт хостинга Рейтинг посещаемости Поисковая машина Интернет-магазин CD-дисков
Хостинг от uCoz