Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.009 c
2-1280146994
nordford
2010-07-26 16:23
2010.10.24
Обход препятсвия


11-1225839176
Jon
2008-11-05 01:52
2010.10.24
ANSI <-> WIDE


15-1279312179
Юрий
2010-07-17 00:29
2010.10.24
С днем рождения ! 17 июля 2010 суббота


2-1280840158
mylasthit
2010-08-03 16:55
2010.10.24
Создание N кол-ва обьектов, кодом и редактирование каждого обьект


3-1246952901
bafy
2009-07-07 11:48
2010.10.24
Как подключить библиотеки для работы с ODBC?