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

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

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

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

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

Сообщение GAMER »

В Turbo Pascal, если я не ошибаюсь, процедура val, давала результат 12 и указывала, что ошибка в 3-м символе.
FPC результирует в 0. StrToInt, говорит, что некоректное числовое значение.
Есть ли простой метод получить 12?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

Сообщение GAMER »

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

12k - специально подбирал букву, чтобы не попасть в 16-ю систему, и все равно "попал" :)
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>То есть, такая работа val - фича, а не баг?
Стандартов на этот счет не видел, но ИМХО нормальная работа функции. Это в ТР баг (тоже ИМХО), на входе не число, на выходе число
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Так же и MySQL работает, если поле числовое, а ему на вход кривое число подают. Он число пишет, а буквы отбрасывает.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

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

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

Сообщение GAMER »

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

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

В смысле я - неправ или Мускуль вводит в заблуждение?
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

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


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

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

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

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

Сообщение GAMER »

Код: Выделить всё

var k: real; r:byte; st: ansistring;
begin
val('12',k,r);
write(k,'  ',r);
val('12a',k,r);
write(k,'  ',r);
end.

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

Сообщение stikriz »

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


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

Сообщение GAMER »

Так - пойдет. Просто, на этапе написания поста, я не знал баг это или фича (Старые воспоминания про турбо паскаль немного смущали :) )
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Будь это фичей, из строки '-12x' должно получаться -12, но знак теряется и получается 12. Поэтому можно сделать вывод, что Дельфи просто забывает обнулить результат в случае ошибки.
Хотя, возможно, стоит пропатчить Val() в FPC, чтобы вела себя таким образом (с учетом знака, естественно). Может оказаться полезным...
Ответить