Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Округление числа

Автор: leone.incognito 21.09.2007 21:50

Здрасти ,имеется следущая проблемма:есть ,например, число 5.8 вопрос в том как "округлить" его до 5 в программе ? Оно может быть непредсказуемо, в зависимости от условия задачи.И 5.7 и 8.9 и 6.1 и 9.2 и.... а?

Автор: volvo 21.09.2007 22:03

Это теперь называется "округление"? Вообще-то это больше похоже на "отбрасывание дробной части": смотри в сторону Trunc(X)

Автор: leone.incognito 21.09.2007 22:56

Можно-ли сделать так:в числе после точки есть значения .если в них присутствует цифра 6 и больше то округляем число и вычитаем из него 1,ежели нет то просто округляем..........вопрос следуйщий.........как работать с тем что после точки?? cool.gif

Автор: volvo 21.09.2007 23:29

А теперь внимательно перечитай предыдущий пост, и объясни мне, что проще:
1) взять дробную часть, проверить, присутствует там 6 или нет (кстати, та еще проверочка может получиться, попробуй, развлекись на досуге, скажем, в дробной части 10.10127 тоже присутствует число больше 6, и что?), после чего округлить число и в случае положительного ответа на предыдущий вопрос еще вычесть 1,

или

2) воспользоваться той функцией, которую тебе уже посоветовали, и сразу отбросить дробную часть...

И заодно объясни, зачем ты задаешь вопросы, и после получения ответа говоришь, что "подумал и надо делать вот так..." Тебе никогда не казалось, что думать надо ДО того, как задавать вопрос?

Автор: leone.incognito 22.09.2007 23:21

volvo!
1)мне нужно получить дробную часть, вычитывая из числа его-же только целое значение,притом оно не может быть на единицу больше чем целое с отбросом дробной части неокругленное число над которым выполняется расчёт;

чтоб было понятней вот пример:
дано число 4.567
Если мы его округлим то получим число пять,а число пять
будет по смыслу моей задачи неправильно ,поскольку
должно получиться число
четыре(из дроби вычитается дробная часть)
значит, мы вычитаем из
него один...но вдруг это будет число
4.289 и что, мы будем его округлять
и вычитать из него единицу?конечно нет .
вот я и спрашиваю как их различать.


P.S. чем я кого-то обидел?просто я не умею быстро отладно думать.

Автор: TarasBer 23.09.2007 2:20

Есть функция round - округляет
Есть функция trunc - отбрасывает дробную часть
Есть функция frac - даёт дробную часть

trunc и frac с отрицательными числами с математической точки зрения работают неправильно:
trunc(-1.5) = -1 (на самом деле это -2)
frac(-1.5) = -0.5 (на самом деле это 0.5, и вообще дробная часть не может быть меньше нуля)

Да, в Паскале даже -1 mod 4 = -1 (отрицательный остаток от деления!!! Причём это похоже специально так сделали, потому что word(-1) mod 4 = 3, то есть на битовом уровне должно быть 3)

можно делать так x := frac(x); if x<0 then x := x + 1;
тогда будет правильно с точки зрения математики

Автор: leone.incognito 14.10.2007 21:48

VOLVO!!!!Sorry............