Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 18:40   #1
Nikik
Пользователь
 
Регистрация: 02.06.2010
Сообщений: 15
По умолчанию перерасчет значений

Добрый день)

при перерасчете , при вводе в 1 поле , 0,1 и т,д возникает ошибка
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var a,s : integer;
begin
If Edit1.Text <> '' then
 begin
  a:=StrToInt(Edit1.Text);
  s:=1-a;
  If s mod 3 = 0 then
   begin
    Edit2.Text := IntToStr(s div 3);
    Edit3.Text := Edit2.Text;
    Edit4.Text := Edit2.Text;
   end
  else
   Begin
    Edit2.Text := IntToStr(s div 3);
    Edit3.Text := Edit2.Text;
    Edit4.Text := IntToStr((s div 3)+(s mod 3));
   end;

Последний раз редактировалось Nikik; 16.05.2013 в 13:43.
Nikik вне форума Ответить с цитированием
Старый 15.05.2013, 21:28   #2
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

1. Для кода есть теги
/CODE][/CODE]

2. Какая ошибка? И на какой строке? Лучше сразу писать всю информацию.

3. Вероятно ошибка здесь a:=StrToInt(Edit1.Text);
Если вы вводите в Edit1 строку "0,1", то её нельзя преобразовать в целое число (StrToInt), решения могут разными в зависти от задачи, например, использование вещественных чисел, или StrToIntDef.
Armorer вне форума Ответить с цитированием
Старый 16.05.2013, 00:13   #3
Nikik
Пользователь
 
Регистрация: 02.06.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Armorer Посмотреть сообщение


2. Какая ошибка? И на какой строке? Лучше сразу писать всю информацию.

3. Вероятно ошибка здесь a:=StrToInt(Edit1.Text);
Если вы вводите в Edit1 строку "0,1", то её нельзя преобразовать в целое число (StrToInt), решения могут разными в зависти от задачи, например, использование вещественных чисел, или StrToIntDef.

2)Ошибка "0,1" is not a valid integer value

Последний раз редактировалось Nikik; 16.05.2013 в 13:44.
Nikik вне форума Ответить с цитированием
Старый 16.05.2013, 00:49   #4
Nikik
Пользователь
 
Регистрация: 02.06.2010
Сообщений: 15
По умолчанию

кусок кода
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: integer;
begin
  if ((Edit1.Text) <> '') and ((Edit2.Text) <> '') and ((Edit3.Text) <> '') and
    ((Edit4.Text) <> '') then
  begin
    if (strtofloat(Edit1.Text) + strtofloat(Edit2.Text) + strtofloat
        (Edit3.Text) + strtofloat(Edit4.Text)) = 1 then
Nikik вне форума Ответить с цитированием
Старый 16.05.2013, 08:40   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

попробуйте писать не 0,1 и 0,25 а так: 0.1 и 0.25

ну, и чтобы не допустить таких ситуаций, я бы предложил функцию StrToFloat заменить на такую:
Код:
function StrToFloatProtected(s: string) : double;
var repl_char : char;
begin
  if DecimalSeparator = '.' then repl_char := ',' else repl_char := '.';
  StrReplace(S, repl_char , DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
  StrReplace(S, ' ' , '', [rfIgnoreCase, rfReplaceAll]);
  try
    Result := StrToFloat(S)
  except
    Result := 0;
  end;
end;

Последний раз редактировалось Serge_Bliznykov; 16.05.2013 в 08:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2013, 12:26   #6
Nikik
Пользователь
 
Регистрация: 02.06.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
скорее всего, десятичный разделитель в системе не такой, какой вы записываете в числе.

попробуйте писать не 0,1 и 0,25 а так: 0.1 и 0.25

исправил на точку, такая же ошибка

Последний раз редактировалось Nikik; 16.05.2013 в 13:32.
Nikik вне форума Ответить с цитированием
Старый 16.05.2013, 12:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это называется исправил? Тупая копипаста только. Функцию Сержа подправил, не нашел StrReplace. И примерно так
Код:
function StrToFloatProtected(s: string) : double;
var repl_char : char;
begin
  if DecimalSeparator = '.' then repl_char := ',' else repl_char := '.';
  s:=StringReplace(S, repl_char , DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
  s:=StringReplace(S, ' ' , '', [rfIgnoreCase, rfReplaceAll]);
  try
    Result := StrToFloat(S);
  except
    Result := 0;
  end;
end;

procedure TForm5.Edit4Change(Sender: TObject);
var a,s : double;
begin
If Edit4.Text <> '' then
 begin
  a:=StrToFloatProtected(Edit4.Text);
  s:=RoundTo((1-a)/3,-2);
  Edit5.Text:=FloatToStrF(s,ffFixed,5,2);
  Edit6.Text:=Edit5.Text;
  Edit7.Text:=FloatToStrF(1-a-2*s,ffFixed,5,2);
 end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2013, 13:03   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Функцию Сержа подправил, не нашел StrReplace
приношу свои извинения.
Действительно, эта функция из JclStrings (Project JEDI Code Library (JCL)
Безусловно, лучше воспользоваться стандартной дельфийской!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2013, 13:04   #9
Nikik
Пользователь
 
Регистрация: 02.06.2010
Сообщений: 15
По умолчанию

на RoundTo ругается
Код:
s:=RoundTo((1-a)/3,-2);
Nikik вне форума Ответить с цитированием
Старый 16.05.2013, 13:06   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Nikik Посмотреть сообщение
на RoundTo ругается
Math в uses добавь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перерасчет координат объектов Алексей_2012 Общие вопросы Delphi 17 11.05.2013 23:55
В задаче необходимо вывести на экран таблицу значений функции У(х) и ее разложения в ряд С (х) для значений х от до с шагом.(Паск fashionweek Паскаль, Turbo Pascal, PascalABC.NET 1 07.02.2013 23:11
Вычисление значений функции для нескольких значений аргументов и параметров kolychii Помощь студентам 0 08.10.2012 15:49
Сравнение значений в 2х столбцах и удаление лишних значений.. Tyr Microsoft Office Excel 2 16.12.2010 18:19
Сохранение и загрузка в файл текстовых значений и значений типа Boolean krikaved Общие вопросы Delphi 1 16.03.2010 07:53