Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 408

/ вопрос открыт /

Приветствую, уважаемые эксперты!
такой код.

подставляю в Эдиты целые числа - все хорошо.
а если дробные - ошибка ('напр. 3.2' is not a valid floating point value)
в чем тут дело

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. min: integer;
  4. v, v1, dist, sek, sek2, sek1: double;
  5.  
  6. begin
  7.  
  8. dist:= strtofloat(Edit1.Text);
  9. min:= strtoint(Edit2.Text);
  10. sek:= strtofloat(Edit3.Text);
  11.  
  12. sek1:= min*60;
  13. sek2:= sek1 + sek;
  14.  
  15. v1:= dist/sek2;
  16. v:= (3600*v1)/1000;
  17.  
  18.  
  19.  
  20. end;
  21. end.


габибыч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: габибыч (статус: Заблокирован)
Вопрос отправлен: 10 июля 2010, 17:51
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

А есть такая байда глобальная, называется DecimalSeparator. Эта глобальная переменная, которая напрямую зависит от настроек Windows (см. скриншот). Для отдельно взятой программы эту переменную даже можно изменить, но не стоит вводить юзера в заблуждение. Поэтому вводи не 3.2, а 3,2 и всё будет пушисто.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 10 июля 2010, 19:24
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 11 июля 2010, 01:41; участников в обсуждении: 2.
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 20:03 [#1]:

блииииииин, ну конечно...)
апипеть!
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 20:05 [#2]:

min@y™, как менять эту хрень я знаю.... просто забыл)
min@y™

min@y™ (статус: Доктор наук), 10 июля 2010, 20:19 [#3]:

Цитата (габибыч):

как менять эту хрень я знаю.... просто забыл

Можно просто DecimalSeparator:= '.';
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 20:24 [#4]:

спасибо! еще вопросик:
     procedure TForm1.Button1Click(Sender: TObject);
var kol,pro: integer;
    sum, skidka, cena, i: real;
 
begin
     cena:= strtofloat(Edit1.Text);
     kol:= strtoint(Edit2.Text);
     sum:= cena * kol;
 
 
     if sum < 300 then
     begin
          Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
       end;
 
 
      if sum > 300 then
 
           begin
           pro:= 1;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
 messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
            +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0)
           end;
 
 
           if sum > 500 then
           begin
           pro:= 2;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
  messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
              +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0)
 
end;
 
 
           if sum > 1000 then
           begin
           pro:= 3;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
 messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
            +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0);
        end;

при втором и третьем условиях выходят предыдущие диалоговые окна.
как это исправить?
min@y™

min@y™ (статус: Доктор наук), 10 июля 2010, 20:30 [#5]:

Во-первых, такая байда противоречит правилам портала. Задавай вопросы по-нормальному.
Во-вторых, код с таким жутким форматированием я читать не буду. Отформатируй, хотя бы, нормально и напиши комментарии. А то мне телепатор за неуплату отключили.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 20:39 [#6]:

надо вычислить стоимость покупки

 
procedure TForm1.Button1Click(Sender: TObject);  //нажимаю 
                                                   кнопку
 
var kol,pro: integer;           // кол-во товаров, процент 
                                                    скидки
 
sum, skidka, cena: real;   //сумма,
                                  скидка, цена
 
begin
     cena:= strtofloat(Edit1.Text); 
     kol:= strtoint(Edit2.Text);
     sum:= cena * kol;
 
 
     if sum < 300 then  // если сумма покупки  < 300, то  
                           скидки нет
 begin
          Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
       end;
 
 
      if sum > 300 then //если сумма покупки больше 300,
                          то скидка 1%
 
           begin
           pro:= 1;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
 messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
            +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0)
           end;
 
 
           if sum > 500 then // скидка 2%
           begin
           pro:= 2;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
  messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
              +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0)
 
end;
 
 
           if sum > 1000 then //скидка 3%
           begin
           pro:= 3;
           skidka:= (sum*pro)/100;
           sum:= sum - skidka;
           Panel1.Caption:= 'стоимость: ' +floattostr(sum)+ ' руб';
 messagedlg('скидка в %: ' +inttostr(pro)+ '  величина скидки: '
            +floattostr(skidka)+ ' руб', mtinformation, [mbok], 0);
        end;

так надеюсь понятней??
min@y™

min@y™ (статус: Доктор наук), 10 июля 2010, 20:51 [#7]:

Цитата (габибыч):

так надеюсь понятней??

Я ж сказал, это противоречит правилам портала. Один вопрос - одна страница.
И где, чёрт возьми, условие задачи? Я не хочу (ненавижу) править чужой кривой бажный код, проще и быстрее написать всё с нуля.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 20:56 [#8]:

ыыы...
условие:
Написать программу, которая вычисляет стоимость покупки с учетом скидки. Скидка 1 % предоставляется, если сумма покупки больше 300 рублей, 2 % — если сумма больше 500 рублей, 3 % — если сумма больше 1 000. Информация о предоставленной скидке (процент и величина) должна быть выведена в диалоговом окне.
min@y™

min@y™ (статус: Доктор наук), 10 июля 2010, 21:38 [#9]:

Вот тебе функция:
// Функция возвращает цену с учётом скидки.
function PriceToDiscount(const Price: Currency): Currency;
begin
  Result:= Price;
 
  if Price > 1000
    then Result:= Price * 0.97
    else if Price > 500
           then Result:= Price * 0.98
           else if Result > 300
                  then Result:= Price * 0.99;
end;
Воспользуйся ею.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
габибыч

габибыч (статус: Заблокирован), 10 июля 2010, 23:41 [#10]:

респект
габибыч

габибыч (статус: Заблокирован), 11 июля 2010, 01:33 [#11]:

код немного маленьким стал, но работает также как мной написанный.

проблема была такая:

>Информация о предоставленной скидке (процент и величина) должна быть выведена в диалоговом окне.

- выводится.
но окно о инфо второй(третьей) скидки выводится после первой(второй), а надо чтобы для каждой скидки выходило свое окно и один раз.

надеюсь понятно написал..)
габибыч

габибыч (статус: Заблокирован), 11 июля 2010, 01:41 [#12]:

YeS! решил!
интересная вещь:
когда условия идут снизу вверх, до второго, третьего и т.д. повторяются предыдущие, а когда сверху вниз - каждое условие (вместе с его причиндалами) отдельно.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.03 сек.