Помощь - Поиск - Пользователи - Календарь
Полная версия: Округление числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
leone.incognito
Здрасти ,имеется следущая проблемма:есть ,например, число 5.8 вопрос в том как "округлить" его до 5 в программе ? Оно может быть непредсказуемо, в зависимости от условия задачи.И 5.7 и 8.9 и 6.1 и 9.2 и.... а?
volvo
Это теперь называется "округление"? Вообще-то это больше похоже на "отбрасывание дробной части": смотри в сторону Trunc(X)
leone.incognito
Можно-ли сделать так:в числе после точки есть значения .если в них присутствует цифра 6 и больше то округляем число и вычитаем из него 1,ежели нет то просто округляем..........вопрос следуйщий.........как работать с тем что после точки?? cool.gif
volvo
А теперь внимательно перечитай предыдущий пост, и объясни мне, что проще:
1) взять дробную часть, проверить, присутствует там 6 или нет (кстати, та еще проверочка может получиться, попробуй, развлекись на досуге, скажем, в дробной части 10.10127 тоже присутствует число больше 6, и что?), после чего округлить число и в случае положительного ответа на предыдущий вопрос еще вычесть 1,

или

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

И заодно объясни, зачем ты задаешь вопросы, и после получения ответа говоришь, что "подумал и надо делать вот так..." Тебе никогда не казалось, что думать надо ДО того, как задавать вопрос?
leone.incognito
volvo!
1)мне нужно получить дробную часть, вычитывая из числа его-же только целое значение,притом оно не может быть на единицу больше чем целое с отбросом дробной части неокругленное число над которым выполняется расчёт;

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


P.S. чем я кого-то обидел?просто я не умею быстро отладно думать.
TarasBer
Есть функция 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
VOLVO!!!!Sorry............
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.