Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизФункции арифметического округления Найти похожие ветки
← →
Genry (2006-03-27 20:14) [0]Подскажите, есть ли в Дельфи (D7) стандартные функции арифметического (не банковского) округления?
Сейчас такую функцию написал сам, но все-таки интересует наличие именно стандартных и, желательно безглючных :-)
Спасибо.
← →
Eraser © (2006-03-27 20:21) [1]
> Genry (27.03.06 20:14)
Round ?
← →
Genry (2006-03-27 20:22) [2]
> Eraser © (27.03.06 20:21) [1]
И как заставить ее округлять арифметически?
← →
Eraser © (2006-03-27 21:00) [3]
> Genry (27.03.06 20:22) [2]
что значит "арифметически"?
← →
Genry (2006-03-27 21:28) [4]
> Eraser © (27.03.06 21:00) [3]
Это означает что
Округл(2.5) = 3
(например)
← →
EvS © (2006-03-27 22:24) [5]SimpleRoundTo
← →
EHOT © (2006-03-27 23:25) [6]Легче просто Round();
← →
Asail (2006-03-28 01:48) [7]
> Округл(2.5) = 3
RoundTo(2.5, 0)
← →
MBo © (2006-03-28 07:18) [8]см. в хелпе Set8087CW
← →
EvS © (2006-03-28 09:08) [9]>RoundTo(2.5, 0)
RoundTo(2.5, 0) = 2
← →
Genry (2006-03-28 09:29) [10]
> EvS © (27.03.06 22:24) [5]
> SimpleRoundTo
Да, только с отрицательными глючит безбожно :-) Это вобщем-то и по коду видно.
> MBo © (28.03.06 07:18) [8]
> см. в хелпе Set8087CW
Спасибо, сейчас гляну :-)
← →
Genry (2006-03-28 10:03) [11]
> MBo © (28.03.06 07:18) [8]
> см. в хелпе Set8087CW
К сожалению пока не могу понять, какое значение нужно передать в процедуру чтобы добиться желаемого округления?
Дело в том, что я не силен в свойствах FPU :-(
Вот, нашел поисковиком пример:
Set8087CW(Default8087CW or $0800); - но это дает округление до большего всегда, т.е. напр. RoundTo(2.1, 0) = 3.
С отрицательными числами вобще что-то странное творит.
← →
MBo © (2006-03-28 10:22) [12]>К сожалению пока не могу понять, какое значение нужно передать в процедуру чтобы добиться желаемого округления?
Посмотрел интеловскую документацию - только 4 режима доступно - банковское, к нулю, вверх и вниз.
Так что придется Trunc(x+0.5)
← →
Genry (2006-03-28 10:31) [13]
> MBo © (28.03.06 10:22) [12]
> Так что придется Trunc(x+0.5)
Да, я сейчас так и делаю, правда с учетом отрицательных чисел.
Trunc(Value + 0.5 * Sign(Value))
Все-таки странно, что нету такой стандартной ф-ции.
Ну и ладно :-)
Всем спасибо !
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.018 c