Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
02-10-2005 21:02
По правилам округления - 5 округляется ло ЧЕТНОГО числа. Во всех стандартных функциях не так.
Я использую функцию
function RoundReal(S: Double): Double;
var FS,N,P: Double;
begin
if S > 0 then P:= 1 else P:= -1;
FS:= Frac(S) * 100;
if Abs(Frac(FS)) < 0.5 then N:= Int(FS) else
if Abs(Frac(FS)) > 0.5 then N:= Int(FS) + P else
if Odd(trunc(FS)) then N:= Int(FS) + P else
N:= Int(FS);
Result:= int(S) + N / 100;
end;
SetRoundMode(rmNearest);
S := V + 0.0001;
D := V + 0.0001;
X := V + 0.0001;
C := V + 0.0001;
Округляет уже нормально...
Смешно, но даже без добавления 0.0001 округляет правильно если сотая часть меньше 5... т.е. с 1.705 по 1.745 правильно, с 1.755 и дальше - неправильно. Чудеса.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.