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) ). В итоге в тексте, который преобразовывался влезала точка... Из-за нее то и были все проблемы.
Всем спасибо за помощь! Сам бы я не смог разобраться! |
|