powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти ближайшее большее число?
12 сообщений из 12, страница 1 из 1
Как найти ближайшее большее число?
    #32239022
Andrey Pogorelov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите сабж нужно, что-то типа 33/29=1.13 округляем до большего = 2
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239024
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x=round(y+0.5);
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239068
zDIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или Round(Int(X))+1, поскольку иногда 5.999999999...+0.5 может дать больше 6.5 и чуть более (в зависимости от конкретных примененных вещественных типов), что уже даст 7 а не 6!!!
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239070
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное x=round(y+0.4);
потому что при y=1 x будет равен 2
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239147
zDIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Round(1.05+0.4) = 1,
так что
Round(Int(X)) + 1 [ДАЖЕ не Round(Int(X + 1))!!!] - единственный правильный вариант!!!
Вернее, действительно, простого решения не будет, поскольку эта формула будет страдать на значениях, близких к целым, равно как и в первом ответе, в третьем предложении здорово указан недостаток 1-го и 2-го ответов, однако в целом вариант однозначно не совсем подходит, извини.

Хороший выход остается только если известно кол-во десятичных знаков после запятой обрабатываемых чисел (N) или удовлетворительное значение этого числа, в этом случае X2 := Round(X*10^N) и вперед к однозначности, Y := X2 div 10^N + 1.
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239167
SVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SVS
Гость
x:=trunc(y)+1;
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239257
Andrey Pogorelov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ceil(1.13)=2 из Math это нормально
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239465
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2zDIV
а можно узнать, чем отличается
Round(Int(X))
от
Int(X)
?
и что выдаст конструкция
Round(Int(5))+1


в моем варианте, погрешность идет от реализации математического аппарата, алгоритмически все верно.

в твоем варианте, алгоритмический бред, извини.
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239520
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
function MyRound(a: duble): integer;
begin
  Result:= Trunc(a);
  if a <> Trunc(a) then Result:= Result +  1 ;
end;
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239709
Dikobrazz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно именно при делении, то можно что-нибудь такое, исключительно на целочисленной арифметике:
(a div b) + sign(a mod b)
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239722
zDIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оккей,
1) trunc(X)=round(int(X)), сглупил, но это ничего не меняет.
2) trunc(X) и int(X) отличаются типом результата, (здесь это очень важно, абсолютно(!!!), поскольку не всегда, например, 123456789 <> 123456789.0 (можно найти такие пары)) а по вопросу видно, что человеку скорее всего нужно целое число...
3) насчет бреда (обидно, даже если это правда), уважаемый alex_k, я же поправился, если известно кол-во десятичных знаков...
Y := Round(X*10^N) div 10^N + 1, хотя действительно, еще бред, тот же самый эффект на "стыке", так что без условия не обойтись.
4) oleg_e! - это вариант!
type
TOneReal=double;
function MyRound(a: tonereal): integer;
var
b: tonereal; //поскольку не всегда, например, 123456789 <> 123456789.0
// a и b должны быть одного типа!!!
begin
b:= int(a); //нельзя использовать trunc
if a <> b then b := b + 1;
Result := Round(b)
end;
5) для целочисленного деления - предыдущий ответ!!!
...
Рейтинг: 0 / 0
Как найти ближайшее большее число?
    #32239748
Кщд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>zDiv
ответ Dikobrazz - универсален. ИМХО, тема им полностью закрыта.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти ближайшее большее число?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]