Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как посчитать проценты? 
:(
    Опции темы
Digit
  Дата 9.7.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



есть два числа типа real. меньшее из них считается равным 100% и нужно узнать на сколько прочентов второе число болише первого.

проблема в том, что делить real на real нельзя, а как обойти это не знаю... smile
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



уж сколько раз твердили миру smile

Код

var a,b:real
      percent:real;
      a1,b1:integer;
begin
a1:=a*100; // теперь у нас число integer, и его можно делить
b1:=b*100; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
end;


пример:
a=50,45 -> a1=5045 |
..................................| => a1>b1 => percent = 2994*100/5045 = 59,346
b=29,94 -> b1=2994 |

Это сообщение отредактировал(а) Femida - 9.7.2005, 19:25


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



согласен, такой вариант прокатит, но при одноу условии - после запятой не более 2-х символов...
а у меня может быть и больше... (например чтонть типа 34.3453456) smile
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit, проблема решается легко: либо ставишь условие на кол-во знаков после запятой, либо автоматически приписываешь лишние нули (типа се числа домножаются на 1'000'000'000 или любое такое число.


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Femida, навено подумаешь, что я совсем тупой, но как поставить условие на кол-во знаков после запятой? =)
PM MAIL ICQ   Вверх
SPrograMMer
Дата 9.7.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Цитата(Digit @ 9.7.2005, 19:22)
(например чтонть типа 34.3453456)

Ну так домнажай не на 100, а на... скока там у тебя знаков smile


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Digit
Дата 9.7.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(SPrograMMer @ 9.7.2005, 19:27)
Цитата(Digit @ 9.7.2005, 19:22)
(например чтонть типа 34.3453456)

Ну так домнажай не на 100, а на... скока там у тебя знаков smile

В том то и дело, что после запятой не ограниченное кол-во знаков... Точнее сколько real выдержит столько и будет...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Цитата(Digit @ 9.7.2005, 20:12)
на сколько прочентов
подправка: надо же найти разность, тогда конечная вормула:

Код

var: delta:real;
.......

delta:=100-percent;



--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Femida @ 9.7.2005, 19:30)
Код

var: delta:real;
.......

delta:=100-percent;

как мы можем вычесть percent из 100, если мы не можем его посчитать (он все еще real)

есть в Делфях финкции для получения торлько целой части числа (в Паскала знаю trunc)
PM MAIL ICQ   Вверх
Marriage
Дата 9.7.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Что -то я не пойму ....
smile почему нельзя делить real на real ???



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit
Цитата(Digit @ 9.7.2005, 20:27)
как поставить условие на кол-во знаков после запятой? =)



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
Label1.Caption:='Введите число, с количеством знаков после запятой равным n'; // n - прописать числом
a:=StrToInt(Edit1.Text);
Label2.Caption:='Введите число, с количеством знаков после запятой равным n';
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=100-percent;
end;[code=delphi]



Это сообщение отредактировал(а) Femida - 9.7.2005, 19:43


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Marriage @ 9.7.2005, 19:39)
Что -то я не пойму ....
smile почему нельзя делить real на real ???

обьясняю ситуацию:
есть два числа типа real (a1 и a2)
считаем третье число (rez):
Код

rez:= a1/a2;


получаем ответ от Делфей: "Invaild floating point operation"

а вот почему нельзя, этого не знаю... может трудно реализовать или хавает много ресурсов под это дело...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit опять так же можно:

Код
delta:=10^(n+2)-percent*10^n;



Это сообщение отредактировал(а) Femida - 9.7.2005, 19:46


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Femida @ 9.7.2005, 19:42)
Digit
Цитата(Digit @ 9.7.2005, 20:27)
как поставить условие на кол-во знаков после запятой? =)



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
Label1.Caption:='Введите число, с количеством знаков после запятой равным n'; // n - прописать числом
a:=StrToInt(Edit1.Text);
Label2.Caption:='Введите число, с количеством знаков после запятой равным n';
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=100-percent;
end;[code=delphi]


это тоже конечно хороший вариант, но опять одно НО: число берется из файла...

мне проще "обрезать" числу хвост (оставить три знака после запятой)...
PM MAIL ICQ   Вверх
Marriage
Дата 9.7.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Digit
Чет я не понял ...
Код

procedure TForm1.Button1Click(Sender: TObject);
var
a1,a2:real;
rez:real;

begin

 rez:= a1/a2;

 Button1.Caption:=FloatToStr(rez);

end;


Здесь что, должна ошибка вылетать ???

Это сообщение отредактировал(а) Marriage - 9.7.2005, 19:54


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.