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;
}
Конвертирование sting->double
Код:
Вызываю ее в main, например ...
Код:
int main (){
String s("-1.24");
cout << string2Double("-1.24") ;
String s("-1.24");
cout << string2Double("-1.24") ;
Получаю результат 0
Помогите найти ошибку.
Спасибо
Код:
result1 += ( value[ index ] - '0' )
Надо приблизительно так
Код:
result1 += ( value[ index ] - '0' ) * scale;
Во вторых цикл по целой части числа вы почему-то ведете до встречи 0.
Код:
while ( value[ ++index ] != '\0')
Как результат, "точка" в числе просто игнорируется и к результату просто добавляются цифры дробной части, кроме того никогда не выполнится условие
Код:
if (value[index] == '.')
что означает, что дробную часть вы не считаете и само собой этот оператор не выполняется
Код:
result+=result1;
в итоге result всегда равен нулю ну и результат функции ноль.
А вообще вопрос в раздел "Я начинающий..."