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

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

Как правильно округлить 3.0299999 в 3.03?


dimonf ©   (2002-10-08 20:41:00) 

Есть функция но это не то :(

function TMainForm.Conv(cs: double; numb: integer): double;
var db, db1, db2: double;
i: int64;
ii, ink, i1: integer;
begin
db:=cs-int(cs);
ink:=1;
for ii:=1 to numb do ink:=ink*10;
db1:=db*ink;
db2:=cs*ink*100;
i:=trunc(int(db2)/100);
i1:=trunc(db2-i*100);
if i1>49 then inc(i);
result:=i/ink;
end;

Как правильней???


wer1   (2002-10-11 04:40:00) [1]

А расшифровать RoundTo можно, я знаю Round(), а вот
с To? у меня D5 ее не определяет.


REA   (2002-10-10 11:37:00) [2]

А чем RoundTo не устраивает? Всякие "E" это уже формат вывода.


wer1   (2002-10-10 11:11:00) [3]

И все-таки мастера а вопрос интересный все выше приведенные
функции имеют недостаток например при колличестве значащих цифр
более 16 получаем число с Е и никакого округления естественно не будет, т.е. имеем ограничение по величине числа, на практике конечно такие числа используются редко. Я подошел к этой проблеме иначе путе работы не с числом, а как со строкой
писать данную функцию только начал и сталкнулся с теме же
девятками т.е. без девяток например такое вот число округлить можно
35353535353535355454545454545443535335353,124354647464536
а вот при появления оных появляются сложности пример
35353535353535355454545454545443535335353,12435999994647464536
может кто уже делал такую функцию?


Rouse_   (2002-10-10 04:04:00) [4]

Тут захотел проверить утверждение Beglec © (10.10.02 03:27) но не смог найти откуда процедура StrToFloatF (в смысле модуль). Что это за?


Beglec   (2002-10-10 03:27:00) [5]

Добавлю
StrToFloatF работает быстрее чем STR на 80%
сам засекал.


kukuikar   (2002-10-10 00:48:00) [6]

А если так?
StrToFloatF(3.0299999, ffFixed, 5, 2),
где
первое число: - число которое надо округлить;
второе слово: - означает формат числа в которое конвертируется строковая переменная;
третье число: - кол-во значащих целых чисел( если оно получается больше пять, то число показывается в формате - 4,7Е+10);
четвертое число: - кол-во знаков после запятой!!
и все:))


Jeer   (2002-10-08 21:29:00) [7]

RoundTo() - а расшифровать стоит.


Jeer   (2002-10-08 21:28:00) [8]

Сделай так и посмотри.
Все округлиться и без специальных усилий.

Str(3.0299999:4:2,s);


Guerrillero   (2002-10-08 21:21:00) [9]

а так так

uses Math
....
ShowMessage(FloatToStr( RoundTo(3.0299999,-2)));


Jeer   (2002-10-08 21:17:00) [10]

Так все у тебя в руках.
Help
F1 Str(..)


dimonf   (2002-10-08 21:08:00) [11]

Не буть голословным, кинь примерчик.


Jeer   (2002-10-08 20:58:00) [12]

Бессмысленно заниматься округлением double в double, если стоит задача получения ограниченного числа значащих цифр.
Итоговое число все равно будет представлено суммой убывающих степеней двойки с остановкой на МЗР(младшем значащем разряде).

Это задача представления(визуального, текстового, пр.) которая достаточно просто решается различными видами(функциями) форматирования


Наверх

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