Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как мне округлить значение до сотых??? [D6]


Relaxxx ©   (2003-08-27 16:52:00) 

Как мне округлить значение до сотых???
заранее спасибо


Anatoly Podgoretsky   (2003-08-29 10:38:00) [1]

Хорошо, но надо сохранять старый Default8087CW и потом восстанавливать, иначе могут быть трудно уловимые глюки.


paul_k   (2003-08-29 10:24:00) [2]

Спасибо за совет...
значиччи просто функцию врисовать придется)
типа
function ArRoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
begin
Set8087CW($1B72);
result:=ROundTo(AValue,ADigit)
end;

function BuhgRoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
begin
Set8087CW($1372);
result:=ROundTo(AValue,ADigit)
end;

и юзать то что необходимо. я правильно понял?


sniknik   (2003-08-28 16:34:00) [3]

наверное лутше каждый раз (точно не скажу, но может кто добавит чего), его же кроме тебя еще могут использовать (бугалтера разные и игрушки (графика) :-)).
я бы точно поставил прямо перед вычислениями (если б понадобилось), да и там всего пара асемблерных команд на скорость не повлияет.


paul_k   (2003-08-28 16:04:00) [4]

2 sniknik ©

Простите за совсем идиотский вопрос, а устанавливать Set8087CW() необходимо каждый раз, или достаточно при запуске программы?


sniknik   (2003-08-27 21:00:00) [5]

хотя ладно здесь на форуме нашол (хорошо всетаки поиск стал работать)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1060756297&n=3

обратить особое внимание на DiamondShark © (13.08.03 17:38) [30]


sniknik   (2003-08-27 20:54:00) [6]

Nikky © (27.08.03 20:39) [10]
ну а почему бы и нет? кстати раз такой умный может положиш сюда значение Set8087CW(?) которое я не помню, переводящее на математическое округление.
пусть все пользуются.

(еще кстати, себя таким не считаю и F1 пользуюсь весьма активно)


Nikky   (2003-08-27 20:39:00) [7]


> sniknik © (27.08.03 20:32) [9]


> sniknik © (27.08.03 20:31) [8]


F1, выдаваемый за ученость?


sniknik   (2003-08-27 20:32:00) [8]

Nikky © (27.08.03 20:26) [7]
> есть же международные стандарты, и round им соответсвует
по умолчанию бугалтерское округление. проверь.


sniknik   (2003-08-27 20:31:00) [9]

просто рассадник предрассудков :о)))
округление до любого знака RoundTo (правда сама функция производная от Round)
установка математического округления и не только Set8087CW (правда значение которое нужно установить не помню :о)), но если никто его не подскажет, то завтра запостчу (на работе записано))


Nikky   (2003-08-27 20:26:00) [10]


> paul_k © (27.08.03 19:54) [6]
> 44,5=44
> 45,5=46


а как по-вашему он должен работать? 44,5=45? есть же международные стандарты, и round им соответсвует


paul_k   (2003-08-27 19:54:00) [11]

Nikky
Бред это то что Вы написали.
согласно правилам округления дельфы
44,5=44
45,5=46

для проверки выполните код
showmessage(inttostr( round(44.5)));
showmessage(inttostr( round(45.5)));


Тих   (2003-08-27 19:48:00) [12]

Сравнивать оператором "=" опасно. Потому при работе с БД советуют
1) Использовать тип Currency, money и т.п.
2) или decimal
3) или конвертировать в строку
Format(".%3f", [Value]) и сравнивать строки.


Nikky   (2003-08-27 19:43:00) [13]


> paul_k © (27.08.03 19:37) [3]


бред


paul_k   (2003-08-27 19:37:00) [14]

дельфа странно округляет.Подробнее об этом в хелпе написано. Поэтому round подходит
Приходится отдельную функцию писать
сравниваеш 0,5 с x*100-trunc(x*100)
если больше то result = trunc(x*100)/100
иначе result = (trunc(x*100)+1)/100


Nikky   (2003-08-27 18:38:00) [15]

var value: double

value := round (value*100)/100


Jeer   (2003-08-27 18:30:00) [16]

такое возможно только в визуальном представлении.
Str(..)


Наверх

Титульная страница Поиск, карта сайта Написать письмо