Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
ВнизКак правильно округлить 3.0299999 в 3.03? Найти похожие ветки
← →
dimonf (2002-10-08 20:41) [0]Есть функция но это не то :(
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;
Как правильней???
← →
Jeer (2002-10-08 20:58) [1]Бессмысленно заниматься округлением double в double, если стоит задача получения ограниченного числа значащих цифр.
Итоговое число все равно будет представлено суммой убывающих степеней двойки с остановкой на МЗР(младшем значащем разряде).
Это задача представления(визуального, текстового, пр.) которая достаточно просто решается различными видами(функциями) форматирования
← →
dimonf (2002-10-08 21:08) [2]Не буть голословным, кинь примерчик.
← →
Jeer (2002-10-08 21:17) [3]Так все у тебя в руках.
Help
F1 Str(..)
← →
Guerrillero (2002-10-08 21:21) [4]а так так
uses Math
....
ShowMessage(FloatToStr( RoundTo(3.0299999,-2)));
← →
Jeer (2002-10-08 21:28) [5]Сделай так и посмотри.
Все округлиться и без специальных усилий.
Str(3.0299999:4:2,s);
← →
Jeer (2002-10-08 21:29) [6]RoundTo() - а расшифровать стоит.
← →
kukuikar (2002-10-10 00:48) [7]А если так?
StrToFloatF(3.0299999, ffFixed, 5, 2),
где
первое число: - число которое надо округлить;
второе слово: - означает формат числа в которое конвертируется строковая переменная;
третье число: - кол-во значащих целых чисел( если оно получается больше пять, то число показывается в формате - 4,7Е+10);
четвертое число: - кол-во знаков после запятой!!
и все:))
← →
Beglec (2002-10-10 03:27) [8]Добавлю
StrToFloatF работает быстрее чем STR на 80%
сам засекал.
← →
Rouse_ (2002-10-10 04:04) [9]Тут захотел проверить утверждение Beglec © (10.10.02 03:27) но не смог найти откуда процедура StrToFloatF (в смысле модуль). Что это за?
← →
wer1 (2002-10-10 11:11) [10]И все-таки мастера а вопрос интересный все выше приведенные
функции имеют недостаток например при колличестве значащих цифр
более 16 получаем число с Е и никакого округления естественно не будет, т.е. имеем ограничение по величине числа, на практике конечно такие числа используются редко. Я подошел к этой проблеме иначе путе работы не с числом, а как со строкой
писать данную функцию только начал и сталкнулся с теме же
девятками т.е. без девяток например такое вот число округлить можно
35353535353535355454545454545443535335353,124354647464536
а вот при появления оных появляются сложности пример
35353535353535355454545454545443535335353,12435999994647464536
может кто уже делал такую функцию?
← →
REA (2002-10-10 11:37) [11]А чем RoundTo не устраивает? Всякие "E" это уже формат вывода.
← →
wer1 (2002-10-11 04:40) [12]А расшифровать RoundTo можно, я знаю Round(), а вот
с To? у меня D5 ее не определяет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c