![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно округлить 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, если стоит задача получения ограниченного числа значащих цифр.
Итоговое число все равно будет представлено суммой убывающих степеней двойки с остановкой на МЗР(младшем значащем разряде).
Это задача представления(визуального, текстового, пр.) которая достаточно просто решается различными видами(функциями) форматирования