PDA

Просмотр полной версии : деление или проценты


supernewbie
05.07.2010, 12:42
Пытаюсь извлечь минимальное кол-во ХП из максимального.
Вот эта строка выдает ошибку:
ReadMinHpName:=((ReadMaxHpName) / 100 * (procent));
Может есть функция вычесления сразу в процентах?
Или может я не так делю?)

Вообщем опять нид хелп. :D

alexteam
05.07.2010, 12:51
var
ReadMinHpName:integer ?

ReadMinHpName := Round((ReadMaxHpName) / 100 * (procent)); !

supernewbie
05.07.2010, 12:53
блин( опять запилил нубскую темку, ответ на вопрос который нашел сам)
PS вместо / надо писать div

Добавлено через 2 минуты
var
ReadMinHpName:integer ?

ReadMinHpName := Round((ReadMaxHpName) / 100 * (procent)); !

PSS у тебя тоже ошибку "Integer" "Expended" выдает.

alexteam
05.07.2010, 14:20
Round
у тебя тоже ошибку "Integer" "Expended" выдает.
"ниверю" ©

supernewbie
05.07.2010, 16:12
объясни заодно что такое Round )

alexteam
05.07.2010, 16:30
округление
Function Round(Value:extended):integer;

supernewbie
05.07.2010, 16:44
округление чего) число и так целое)

alexteam
05.07.2010, 16:54
(ReadMaxHpName) / 100 * (procent)
число и так целое
ага..

J-Fobos
06.07.2010, 00:30
Еще как в школе учился допустил ту же ошибку, пару дней не мог понять в чем дело. Инета в те времена у меня не было, пришлось своей головой думать. Благо нашел книжку по ассемблеру и глянул как работает операция деления. Сейчас то, все намного проще: неявное преобразование данных защищает от подобного.

Собственно ответ который нужен автору темы: операция деления ВСЕГДА возвращает число с плавающей точкой.

Не имеет значения какой предполагается результат, даже если 4/2 ответом будет 2.0
В вашем случаи для деления можно использовать операцию div, можно исользовать функции Round или Trunc. Может и еще как-то можно, но я не программист и мне в жизни хватает и этих :)

А еще историческая справка (для общего развития): этот фактор когда-то использовали (во времена турбо паскаля 1.0) для преобразования целого числа в число с плавающей точкой. Так как компилятор считал ошибкой запись (если r:real, а z:integer) r:=z; и надо было писать r:=z/1;