Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конвертирование sting->double

9.9K
19 ноября 2008 года
maxxi
35 / / 20.06.2007
Пишу собственный класс string, методу, конвертирующую string-> double.

Код:
double string2Double(const char* value) {
 int  result1 = 0;
 int result2=0;
 double result=0.0;
    bool negative = false;


    int index = -1;
    while ( value[ ++index ] != '\0')
    {
       
                if ( ( index == 0 ) && ( value[ index ] == '-'))
                                  {
                                   negative = true;
                                  }

                                 if ( ( value[ index ] >= '0' ) && ( value[ index ] <= '9' ) )
                                         {
                                            result1 += ( value[ index ] - '0' );
                                                      }
    }
    if (value[index] == '.') {

     double scale = 0.1;
           while (value[index]>= '0' && value[index]<='9') {
                result2 += (value[index]-'0') * scale;
                   scale *= 0.1;
           }

        result1+=result2;
        result+=result1;

    }
    return result;
}


Вызываю ее в main, например ...
 
Код:
int main (){

String s("-1.24");
 cout << string2Double("-1.24") ;

Получаю результат 0
Помогите найти ошибку.

Спасибо
288
19 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Во-первых, вот здесь вы не учитываете разрядность
 
Код:
result1 += ( value[ index ] - '0' )

Надо приблизительно так
 
Код:
result1 += ( value[ index ] - '0' ) * scale;


Во вторых цикл по целой части числа вы почему-то ведете до встречи 0.
 
Код:
while ( value[ ++index ] != '\0')

Как результат, "точка" в числе просто игнорируется и к результату просто добавляются цифры дробной части, кроме того никогда не выполнится условие
 
Код:
if (value[index] == '.')

что означает, что дробную часть вы не считаете и само собой этот оператор не выполняется
 
Код:
result+=result1;

в итоге result всегда равен нулю ну и результат функции ноль.

А вообще вопрос в раздел "Я начинающий..."
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог