Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.09.2009, 02:47
ZPS ZPS вне форума
Прохожий
 
Регистрация: 12.09.2009
Сообщения: 2
Репутация: 10
По умолчанию StrToFloat - помогите разобраться

Есть кусочек кода в котором я пытаюсь понять почему не получается из строки получить число с точкой.

Код:
var
  a : array[1..20] of string[20];
  testvar : Double;
  temp : string;
Код:
  a[3]:='5624.6873';
  a[3][5]:=','; //исправить разделитель
  tmp:=a[3];
  testvar:=StrToFloat(tmp);

отладчик показывает, что testvar получается 4,668.....е..
если убрать лишнюю строку и написать просто StrToFloat(a[3]), то testvar будет 7,23....

В моём понимании, должно получиться testvar=5624,6873

Что я делаю не так?
Ответить с цитированием
  #2  
Старый 12.09.2009, 09:25
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Ваш код правильный (за исключением temp <-> tmp ???).
Только что проверил :
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  a : array[1..20] of string[20];
  testvar : Double;
  temp : string;
begin
  a[3]:='5624.6873';
  a[3][5]:=','; //исправить разделитель

  ShowMessage(a[3]);

  temp:=a[3];
  testvar:=StrToFloat(temp);

  ShowMessage(FloatToStr(testvar));

end;
Ответить с цитированием
  #3  
Старый 12.09.2009, 15:41
ZPS ZPS вне форума
Прохожий
 
Регистрация: 12.09.2009
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо!

Ошибка с tmp/temp появилась тут - невнимательно перепечатал, в оригинале всё верно.

Не понятен тогда следующий момент:

строкой ниже стоит
ListBox1.Items.Add('*');
На эту строку поставлен break point. Когда он срабатывает, я смотрю состояние переменных наводя курсор - ситуация как описал выше.
Если перед этой строкой с break point поставить
ShowMessage(FloatToStr(testvar));
или саму строку заменить на
ListBox1.Items.Add(ShowMessage(FloatToStr(testvar) ));
тоесть добавить в код преобразование обратно (FloatToStr), отладчик начинает показывать всё верно testvar=5624,6873

С чем это связано?
Ответить с цитированием
  #4  
Старый 12.09.2009, 19:28
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

В контексте отладчика я плохой советчик.
Никогда не использовал (не было надрбности).
Может кто-то другой подскажет.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025