Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Проблема с округлением в Делфи   Найти похожие ветки 

 
Bless ©   (2005-01-13 09:37) [0]

Как сделать, чтобы функция round(x) округляла х, если оно ровно посредине между двумя числами, в большую сторону, а не к ближайшему четному.
То есть, обычно функция round работает так:
round(4.1)=4
round(4.6)=5
round(4.5)=4
round(5.5)=6

А мне нужно так:

round(4.1)=4
round(4.6)=5
round(4.5)=5
round(5.5)=6

Можно сделать
SetRoundMode(rmDown);
И везде вместо round(x) писать round(x+0.5).

Но как-то мне этот вариант не очень правится. Может есть еще варианты?


 
ЮЮ ©   (2005-01-13 09:44) [1]

>И везде вместо round(x) писать round(x+0.5).

Пиши не везде, а только в одном месте

function Round(X: Extended): Int64;
begin
 Result := System.Round(X + 0.5);
end;


 
Antonn ©   (2005-01-13 09:54) [2]

а если попадется 4.2?


 
KSergey ©   (2005-01-13 09:56) [3]

Лучше все же Floor... Его поведение хотя бы предсказуемо...


 
Bless ©   (2005-01-13 10:30) [4]

Antonn ©  (13.01.05 09:54) [2]
а если попадется 4.2?


round(4.2+0.5)=round(4.7)=4 при roundMode=rmDown;

Лучше все же Floor... Его поведение хотя бы предсказуемо...

Первый раз услышал про такую. Вот спасибо :) Подойдет. Вот только погоняю из интереса, что эффективнее round или floor.


 
Verg ©   (2005-01-13 10:54) [5]

x := trunc(x) + trunc( frac(x) * 2 );


 
KSergey ©   (2005-01-13 10:55) [6]

Советую почитать спапьи и, особенно, обсуждение

http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=831

Да и вообще все статьи из
http://www.delphikingdom.ru/asp/section.asp?id=16

хотя бы бегло просмотреть


 
©   (2005-01-13 11:52) [7]

Для Value > 0
function Round5(Value:Extended):DWord;
begin
If Frac(Value) >= 0.5 Then Result:= Trunc(Value)+1 Else Result:= Trunc(Value)
end;


 
Antonn ©   (2005-01-13 11:54) [8]

Bless ©   (13.01.05 10:30) [4]

> round(4.2+0.5)=round(4.7)=4 при roundMode=rmDown;

в условии немного не так:

>round(4.1)=4
> round(4.6)=5


 
Anatoly Podgoretsky ©   (2005-01-13 12:01) [9]

Не забывайте про отричательные числа :-)


 
Bless ©   (2005-01-13 17:09) [10]

И еще до кучи, может кто не знает: как оказалось, еще есть стандарный SimpleRoundTo, который округляет сразу "по-человечески" и не только до целых.



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
14-1104569831
Sergey_Masloff
2005-01-01 11:57
2005.01.23
Текс-текс смотрим кто вчера злоупотребил ;-)


14-1104576205
Alex_S
2005-01-01 13:43
2005.01.23
Чудеса с Лексиконом. (История прошлого века)


14-1104480576
gn
2004-12-31 11:09
2005.01.23
ПОЗДРАВЛЯЮ С НОВЫМ


1-1105590321
ashnurov
2005-01-13 07:25
2005.01.23
Поиск файла


3-1103448899
Михаил Т.
2004-12-19 12:34
2005.01.23
Помогите настроить сервер InterBase