Как перевести в число строку '12k'?
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Как перевести в число строку '12k'?
В Turbo Pascal, если я не ошибаюсь, процедура val, давала результат 12 и указывала, что ошибка в 3-м символе.
FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.
Есть ли простой метод получить 12?
FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.
Есть ли простой метод получить 12?
12k вообщето 12000))
руками фильтрануть строку оставив только цифры + - . e
руками фильтрануть строку оставив только цифры + - . e
>>То есть, такая работа val - фича, а не баг?
Стандартов на этот счет не видел, но ИМХО нормальная работа функции. Это в ТР баг (тоже ИМХО), на входе не число, на выходе число
Стандартов на этот счет не видел, но ИМХО нормальная работа функции. Это в ТР баг (тоже ИМХО), на входе не число, на выходе число
GAMER писал(а):число пишет, а буквы отбрасывает
ввод в заблуждение! ИМХО.
GAMER писал(а):Как перевести в число строку '12k'?
А как перевести строку цащцшр342дтывд493оркы4
В 342493.4 ?
А то все ругаются...
- Доктор, когда я делаю вот так... Мне больно!
- Ну, так не делайте так, голубчик.
С каких пор 12к - это число? Это строка.
Добавлено спустя 1 минуту 40 секунд:
GAMER писал(а):FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.
Ничего он не результирует. Сразу поднимается исключение. Ибо это не число.
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Код: Выделить всё
var k: real; r:byte; st: ansistring;
begin
val('12',k,r);
write(k,' ',r);
val('12a',k,r);
write(k,' ',r);
end.Посмотрите.
Я и имел в виду StrToInt.
А так пойдет?

А так пойдет?
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var k: real; r:byte; st: ansistring;
begin
val('12a',k,r);
Memo1.Lines.Add(FloatToStr(k)+' '+IntToStr(r)+' '+'12a');
Memo1.Lines.Add('');
if r > 0 then
begin
val(Copy('12a', 1, r-1), k, r);
Memo1.Lines.Add(FloatToStr(k)+' '+IntToStr(r)+' '+'12a');
end
end;
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Будь это фичей, из строки '-12x' должно получаться -12, но знак теряется и получается 12. Поэтому можно сделать вывод, что Дельфи просто забывает обнулить результат в случае ошибки.
Хотя, возможно, стоит пропатчить Val() в FPC, чтобы вела себя таким образом (с учетом знака, естественно). Может оказаться полезным...
Хотя, возможно, стоит пропатчить Val() в FPC, чтобы вела себя таким образом (с учетом знака, естественно). Может оказаться полезным...
