Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с округлением в Делфи Найти похожие ветки
← →
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
хотя бы бегло просмотреть
← →
R © (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c