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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.08.2008, 13:28
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию Помогите пожалуйста!!

Код:
var
  f1,k1,a1,b1,c1,d1: real;
begin
 a1:=StrToFloat(Edit1.Text);
b1:=StrToFloat(Edit2.Text);
c1:=StrToFloat(Edit3.Text);
d1:=StrToFloat(Edit4.Text);
  k1:=(a1+b1+c1+d1);
      f1:=(2* a1+3* b1+4* c1+5* d1)/k1;
       label1.Caption:=FloatToStrF(f1,ffFixed,1,1);

Как мне сделать, чтобы если значения a1=1, b1=1, c1=1, d1=1, то в Label выводлися бы ответ не «3,5», а ответ был бы равен «3.5»? Подскажите пожалйста на моем примере!
Ответить с цитированием
  #2  
Старый 05.08.2008, 13:50
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Не понятно, у тебя при таком условии результат в Label будет 3.5 , а какой нужен? Если разделитель точка нужна "." - это в настройках Windows меняется

Последний раз редактировалось PashaXP, 05.08.2008 в 13:53.
Ответить с цитированием
  #3  
Старый 05.08.2008, 14:07
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

А если програмно, то
Код:
procedure TForm1.Button1Click(Sender: TObject);

var
  f1,k1,a1,b1,c1,d1: real;
  str:string;
begin
a1:=StrToFloat(Edit1.Text);
b1:=StrToFloat(Edit2.Text);
c1:=StrToFloat(Edit3.Text);
d1:=StrToFloat(Edit4.Text);
  k1:=(a1+b1+c1+d1);
      f1:=(2* a1+3* b1+4* c1+5* d1)/k1;
      str:=FloatToStrF(f1,ffFixed,1,1);
     if Pos(',',str)<>0 then str[Pos(',',str)]:='.';
     label1.Caption:=str;

end;
Ответить с цитированием
  #4  
Старый 05.08.2008, 14:08
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

Ответ будет не в виде "3.5", а в виде "3,5"(. Если у меня будет стоять FloatToStrF(f1,ffFixed,1,1), то ответ будет с запятой. Например, если даже ответ целый получается, то в Label ответ выведется например так: "4,0". А если написать просто FloatToStr(f1), то будет выводится дробь длинная. Но мне нужно, чтобы я в StringGrid-е мог сложить по столбцам. Эту сумму мне надо разделить на четыре и вывести в ячейку таблицы. Но мне программа выдает ошибку: "3,5 is not valid integer value". Что мне сделать, чтобы заработало? Подскажите пожалуйста!)). А как изменить в настройках Windows?
Ответить с цитированием
  #5  
Старый 05.08.2008, 14:11
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Как выше сделал не подходит?
Ответить с цитированием
  #6  
Старый 05.08.2008, 14:15
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Пуск -> Настройка -> Панель управления -> Язык и региональные стандарты. Нажми кнопку "настройка", там увидешь
Но тебе, так понял, не это нужно. Тебе округлять что-ли значения до цеглого нужно?

Последний раз редактировалось PashaXP, 05.08.2008 в 14:19.
Ответить с цитированием
  #7  
Старый 05.08.2008, 14:31
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

1. Label3.Caption := StringReplace(Str, ',', '.', []);
2. Системные настройки лучше не трогать, потому как глюков не меряно можно схватить при использовании других программ, которые под русскую локаль настроены.
Ответить с цитированием
  #8  
Старый 05.08.2008, 14:42
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Цитата:
Сообщение от Phedor
2. Системные настройки лучше не трогать, потому как глюков не меряно можно схватить при использовании других программ, которые под русскую локаль настроены.

это точно!
Ответить с цитированием
  #9  
Старый 05.08.2008, 14:52
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

PashaXP, код попробовал). Теперь он дробную часть отделяет точкой. Это хорошо. Но получится ли у меня в StringGrid-e сложить столбец с дробями и разделить на 4? Про настройки я понял. Не буду менять. Phedor, а что делает функция StringReplace?)
Ответить с цитированием
  #10  
Старый 05.08.2008, 15:07
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Цитата:
Сообщение от artemavd
PashaXP, код попробовал). Phedor, а что делает функция StringReplace?)

тоже что и у меня только - "в один присест "
Ответить с цитированием
  #11  
Старый 05.08.2008, 15:09
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Код я на Delphi сделал и выложил, меняет запятую в слове на точку... Напиши подробнее, что ты хочешь в результате получить, на примере...
Ответить с цитированием
  #12  
Старый 05.08.2008, 15:25
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Цитата:
Сообщение от artemavd
PashaXP, код попробовал). Теперь он дробную часть отделяет точкой. Это хорошо. Но получится ли у меня в StringGrid-e сложить столбец с дробями и разделить на 4? Про настройки я понял. Не буду менять. Phedor, а что делает функция StringReplace?)

1. Нужно просто разделить отображение и арифметику.

2. function StringReplace(const S: string; const OldPattern: string; const NewPattern: string; Flags: TReplaceFlags): string;

S - Исходная строка
OldPattern - подстрока
NewPattern - на что заменить
Flags - TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
rfReplaceAll - заменить все
frIgnoreCase - игнорировать регистр

3. a1:=StrToFloat(Edit1.Text);
Такие вещи лучше в try ... except ... включать. Очень часто человеки ставят и запятую и точку как разделитель, кто что хочет то пишет (особенно любители Excel), еще бывает ставят разделители тыс. части типа: "1 200,20", "1,200.20", "1'200,20".
Вообще смотря кто будет пользоваться :-)

Последний раз редактировалось Phedor, 05.08.2008 в 15:30.
Ответить с цитированием
  #13  
Старый 05.08.2008, 17:22
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

PashaXP, вот код:
Код:
{1}
    if Form1.Label7.Caption='' then SG3.Cells[2,1]:='0'
    else SG3.Cells[2,1]:=Form1.Label7.Caption; (это получение данных с первой формы)
   summ:=(StrToFloat(SG3.cells[2,1])+StrToFloat(SG3.cells[8,1])+StrToFloat(SG3.cells[14,1])+StrToFloat(SG3.cells[20,1]))/4;
  SG3.Cells[26,1]:=FloatToStr(summ);

Мне надо, чтобы например в первой строчке можно было сложить четыре дробных числа и разделить на 4. Ответ снова получится дробь и этот / ответ надо вывести в указанную ячейку). Кто что может предложить?)
Цитата:
a1:=StrToFloat(Edit1.Text);
Такие вещи лучше в try ... except ... включать.
А можете написать применительнок моему коду пожалуйста?)
Ответить с цитированием
  #14  
Старый 05.08.2008, 17:44
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Люди! Для таких простых целей есть две глобальных переменных - DecimalSeparator - разделитель цело и дробной части и ThousandSeparator - разделитель тысяч.

пример:

DecimalSeparator:='.' - разделитель бедет точка '.'
DecimalSeparator:=',' - разделитель бедет запятая ','
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #15  
Старый 05.08.2008, 17:52
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

Цитата:
DecimalSeparator:='.' - разделитель бедет точка '.'
DecimalSeparator:=',' - разделитель бедет запятая ','
А куда в моем коде это вставить можно например?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter