C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Пишет ошибку при преобразовании текста!, AnsiString.ToInt
SnowBars
Отправлено: 06.05.2006, 10:19


Ученик-кочегар

Группа: Участник
Сообщений: 5



Фукция должна выбрать 4 символа после второй точки в тексте, перевести ее в "int" и вернуть значение...

int TForm3::Yearth(AnsiString st)
{
AnsiString Temp;
int i, metka;
for( i=0,metka=0; metka != 2; i++) //Цикл находит положение второй точки
{
if(st.SubString(i,1)== ".")
metka++;
}
Temp = st.SubString(i-1,4);
i = Temp.ToInt(); // <--- Ошибка в этой строчке

return i;
}
Компилируеться все нормально, только в работе программы при нажатии кнопки выдает ошибку : "Project Project1.exe raised exception class EConvertError with message "6.5,' is not a valid integer value'. Process stoped. Use Step or Run to continue."

При этом в строке, которая передаеться функции, есть ровно две точки, а после второй 4 цыфри.

Помогите пожалуста разобраться! Ума не приложу что ему не нравиться...
Guest
Отправлено: 06.05.2006, 11:34


Не зарегистрирован







AnsiString ведет счет с 1
CyberMind
Отправлено: 06.05.2006, 11:55


Ученик-кочегар

Группа: Участник
Сообщений: 29



Ошибка получается из-за того что 6.5 не есть целое число
Сделай вот так
CODE

int i;
i = Edit1->Text.ToDouble();

Тогда тебе вернется число 6, т. е. обрезанное от 6.5 как происходит при присваивании числа типа double к типу int.
Только помни, что функция ToDouble(); преобразует строку "6,5" (с запятой) в тип double, а "6.5" ей непонятно, так что придется менять точки на запятые.
Guest
Отправлено: 06.05.2006, 13:02


Не зарегистрирован







Привет.
А почему у тебя SubString(i-1, а не SubString(i+1, ???
Doga
Отправлено: 06.05.2006, 16:30


Мастер участка

Группа: Участник
Сообщений: 575



Что бы обойти ошибки, связанные с преобразованием текста в вещественные числа можно воспользоваться переменной DecimalSeparator, а так же обрабатывать ошибку EConvertError в try...catch
SnowBars
Отправлено: 08.05.2006, 10:43


Ученик-кочегар

Группа: Участник
Сообщений: 5



Все разобрался... Как подсказали Ansistring начинает счет с 1 и я ошибся с вылавливанием последних четырех цыфр в Temp = st.SubString(i-1,4) (надо было просто st.SubString(i,4) ). В итоге в тексте, который преобразовывался влезала точка... Из-за нее то и были все проблемы.
Всем спасибо за помощь! Сам бы я не смог разобраться! smile.gif

Вернуться в Вопросы программирования в C++Builder