Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
01-01-2006 09:05
Я обычно поступаю примерно так (способ очень плохой, но для той программы, где это использовалось вполне подходил):
function MyCeil(X:double;N:shortint):double;
var I:shortint;
begin
For I:=0 to N-1 do X:=X*10;
For I:=0 downto N+1 do X:=X/10;
X:=Ceil(X);
For I:=0 to N-1 do X:=X/10;
For I:=0 downto N+1 do X:=X*10;
Result:=X;
end;
Проблема лишь в том, что может возникнуть переполнение типа integer.
28-11-2005 01:32 | Комментарий к предыдущим ответам
Доброе утро
Уважаемый “GEO” :
1) Да признаю что “Ceil” округляет к integer (был не прав)
2)Вы попробуйте сами используя ф-цию FloatToStrF
из 1.63333333333333333333333 получить 1.64
1.64 в этом случае получится только если использовать "округление вверх". К сожалению, не знаю, как это реализуется в Делфи - последний раз это делалось на смеси Паскаля с Асмом.
to Max111:
>>> Видимо Вам не интересно использовать function “Ceil”
Читайте хелп до конца. Call Ceil to obtain the lowest integer greater than or equal to X. Integer, но никак не 1,64
>>> <...> Если необходимо в дальнейшем округлить до одного <...>
Видимо, Вам неинтересно пользоваться функцией FloatToStrF, в которой все это уже реализовано
Видимо Вам не интересно использовать function “Ceil”
(Rounds variables up toward positive infinity.)
Поэтому
Самый тупой но дыропрочный вариант:
При получении результата, сравниваете его длину после запятой с эталонной длиной
И отсекаете лишнее
Например
Если необходимо два знака и эталон 0.XX
И результат 1.6398798798797
То при отсечении получите 1.63
Если необходимо в дальнейшем округлить до одного знака то
Смотрите на последний знак
и если он больше 5 то значит на выходе будет 1.7
если он меньше 5 то значит на выходе будет 1.6
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.