Текущий архив: 2010.10.24;
Скачать: CL | DM;
Вниз
Банковское округление Найти похожие ветки
← →
И. Павел © (2010-07-20 10:41) [0]Здравствуйте.
Я хочу написать функцию, производящую банковское округление числа типа currecny до 2 знаков после запятой. Сейчас написал вот такую:function BankRound(c: currency): currency;
var modul: integer;
ostatok: integer;
begin
modul := abs(trunc(c * 10000));
ostatok := trunc(modul) mod 100;
modul := (trunc(modul) - trunc(modul) mod 100);
if ostatok > 0 then
if ostatok <> 50 then modul := modul + 100
else if modul mod 2 <> 0 then modul := modul + 100;
if c >= 0 then result := modul / 10000
else result := -modul / 10000;
end;
Работает, но наверняка можно это сделать проще и лучше.
Подскажите, пожалуйста, как правильно и абсолютно точно осуществить банковское округление числа типа currecny до 2 знаков после запятой?
Заранее спасибо.
← →
И. Павел © (2010-07-20 10:43) [1]Извиняюсь, опечатался: currecny -> currency
← →
Омлет © (2010-07-20 10:44) [2]SimpleRoundTo?
← →
12 © (2010-07-20 10:45) [3]RoundTo?
← →
И. Павел © (2010-07-20 10:50) [4]> SimpleRoundTo?
Это ассиметричное округление - там если последняя отбрасываетмая цифра = 5, то округляется всегда в большую сторону.
> RoundTo?
В справке написано, что работа этой функции зависит от Set8087CW и SetRoundMode. У SetRoundMode нет значения для банковского округления, а с Set8087CW я не разобрался, но вроде бы она вообще завитит от процессора...
← →
Омлет © (2010-07-20 10:57) [5]http://www.interface.ru/home.asp?artId=19535
← →
Anatoly Podgoretsky © (2010-07-20 10:59) [6]RoundTo
Rounds a floating-point value to a specified digit or power of ten using “Banker’s rounding”.
← →
Омлет © (2010-07-20 11:14) [7]Ну и для полноты ощущений:
http://qc.embarcadero.com/wc/qcmain.aspx?d=14394
https://forums.embarcadero.com/thread.jspa?messageID=253247
← →
Омлет © (2010-07-20 11:29) [8]Ну и ссылка на DecimalRounding_JH1: http://cc.embarcadero.com/Item/21909
← →
И. Павел © (2010-07-20 13:05) [9]12 ©, Anatoly Podgoretsky © - спасибо.
Омлет © - Вам отдельное большое спасибо за то, что все разъяснили. Я и не подозревал, что стандартные функции округления имеют ошибки. Буду пользоваться библиотекой от John Herbster.
Страницы: 1 вся ветка
Текущий архив: 2010.10.24;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.008 c