Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2012, 02:54   #11
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Delphi_ProGer
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 13:58   #12
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Значит в Делфи нет функции типа округлитьвверх без всяких разделений на чётные и нечётные числа? Или я просто не понял? Round округляет не так как надо...
Artsiom вне форума Ответить с цитированием
Старый 03.08.2012, 14:00   #13
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Artsiom
Просто округление использует банковские правила.
Цитата:
Round округляет не так как надо...
Пример?
Если тот что попадает под эти самые правила, то тогда проще будет написать свою функцию.
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 14:05   #14
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Сделать так:
получаем число, проверяем, если Frac числа отличен от 0, то берём Int и прибавляем 1. Осталось только реализовать..
На счёт примера, надо что бы всегда, при любых дробных округляло вверх.
Artsiom вне форума Ответить с цитированием
Старый 03.08.2012, 14:15   #15
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Artsiom
Так это тогда не общепринятое округление какое-то получается.
Пишите свою функцию.

Код:
Function MyRound(n:real):integer;
begin
  if frac(n)>0 then
    myround:=trunc(n)+1
  else
    myround:=n;
end;

Последний раз редактировалось Базиля; 03.08.2012 в 14:32. Причина: Немного подправил ^^
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 14:24   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так не?
Код:
function MyRound(X: Extended):Int64;
begin
  result :=  trunc(X + 0.9999999);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2012, 14:32   #17
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Красивей вариант
Со своим примером, я что-то даже и не заметил что сам прописал, тип возвращаемого результата у функции целочисленного типа конечно же
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 15:33   #18
Orakul89
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так не?
Код:
function MyRound(X: Extended):Int64;
begin
  result :=  trunc(X + 0.9999999);
end;
А так?
Код:
  result :=  round(X + 0.5);
Orakul89 вне форума Ответить с цитированием
Старый 03.08.2012, 15:37   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Базиля
Красивей вариант

на самом деле, на практике вариант с if frac(X)>0 then может автору топика гораздо больше подойти - ибо в моём случае количество девяток после десятичной точки должно быть заведомо не меньше, чем число десятичных знаков в округляемом числе.

и ещё одно важное замечание - надо проверять, что автору топика нужно, если число отрицательное:
минус 9 разделить на 4 - сколько должно получиться в результате округления?!


Добавлено

Orakul89, так не пойдёт. Ибо автору топика нужно, чтобы целые числа не округлялись вверх.
попробуйте на примере Round(15/3 + 0.5) - получите 6, хотя, думаю, что автор ожидает получить 5

Последний раз редактировалось Serge_Bliznykov; 03.08.2012 в 15:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2012, 16:01   #20
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
function MyRound(X: Extended):Int64;
begin
  result :=  trunc(X + 0.9999999);
end;
Не, не. Это как раз то, что надо. С отрицательными числами у меня нет работы и точность хорошая.
Artsiom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись полученных данных Delphi7 -Jack- Работа с сетью в Delphi 2 08.07.2012 15:44
Delphi7. Запись в Word из другого файла freeeeez Общие вопросы Delphi 0 08.01.2011 23:49
Delphi7. записи во внешний файл несколько вещественных чисел sara4ka Помощь студентам 5 08.05.2010 11:40
Запись структуры TList в файл, проблема с длинными строками типа AnsiString Xardas Общие вопросы Delphi 2 24.05.2009 20:18