Как перевести в число строку '12k'?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Как перевести в число строку '12k'?

Сообщение GAMER » 20.09.2010 22:47:12

В Turbo Pascal, если я не ошибаюсь, процедура val, давала результат 12 и указывала, что ошибка в 3-м символе.
FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.
Есть ли простой метод получить 12?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение zub » 20.09.2010 23:13:39

12k вообщето 12000))
руками фильтрануть строку оставив только цифры + - . e
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Как перевести в число строку '12k'?

Сообщение GAMER » 20.09.2010 23:25:13

То есть, такая работа val - фича, а не баг?

12k - специально подбирал букву, чтобы не попасть в 16-ю систему, и все равно "попал" :)
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение zub » 20.09.2010 23:30:29

>>То есть, такая работа val - фича, а не баг?
Стандартов на этот счет не видел, но ИМХО нормальная работа функции. Это в ТР баг (тоже ИМХО), на входе не число, на выходе число
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Как перевести в число строку '12k'?

Сообщение GAMER » 20.09.2010 23:37:12

Так же и MySQL работает, если поле числовое, а ему на вход кривое число подают. Он число пишет, а буквы отбрасывает.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение VirtUX » 21.09.2010 00:53:05

GAMER писал(а):число пишет, а буквы отбрасывает

ввод в заблуждение! ИМХО.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как перевести в число строку '12k'?

Сообщение GAMER » 21.09.2010 01:02:18

VirtUX писал(а):
GAMER писал(а):число пишет, а буквы отбрасывает

ввод в заблуждение! ИМХО.

В смысле я - неправ или Мускуль вводит в заблуждение?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение stikriz » 21.09.2010 14:10:51

GAMER писал(а):Как перевести в число строку '12k'?


А как перевести строку цащцшр342дтывд493оркы4
В 342493.4 ?
А то все ругаются...
- Доктор, когда я делаю вот так... Мне больно!
- Ну, так не делайте так, голубчик.

С каких пор 12к - это число? Это строка.

Добавлено спустя 1 минуту 40 секунд:
GAMER писал(а):FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.

Ничего он не результирует. Сразу поднимается исключение. Ибо это не число.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Как перевести в число строку '12k'?

Сообщение GAMER » 21.09.2010 14:57:36

Код: Выделить всё
var k: real; r:byte; st: ansistring;
begin
val('12',k,r);
write(k,'  ',r);
val('12a',k,r);
write(k,'  ',r);
end.

Посмотрите.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение stikriz » 21.09.2010 15:28:05

Я и имел в виду 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;


:-)
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Как перевести в число строку '12k'?

Сообщение GAMER » 21.09.2010 15:38:00

Так - пойдет. Просто, на этапе написания поста, я не знал баг это или фича (Старые воспоминания про турбо паскаль немного смущали :) )
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как перевести в число строку '12k'?

Сообщение Sergei I. Gorelkin » 21.09.2010 20:11:19

Будь это фичей, из строки '-12x' должно получаться -12, но знак теряется и получается 12. Поэтому можно сделать вывод, что Дельфи просто забывает обнулить результат в случае ошибки.
Хотя, возможно, стоит пропатчить Val() в FPC, чтобы вела себя таким образом (с учетом знака, естественно). Может оказаться полезным...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru