Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.21;
Скачать: CL | DM;

Вниз

Как правильно округлить 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-68825
Sergey_Elf
2002-10-10 10:32
2002.10.21
Запускаю архиватор через shellexecute, как узнать когда закончил


8-68873
Ricks
2002-06-17 12:31
2002.10.21
Отрисовка 32 битного изображения


7-69050
TU-154
2002-08-13 13:58
2002.10.21
Передача команд на принтер


8-68874
AlexPetrov
2002-06-20 15:46
2002.10.21
Модернизация ScrollBox


14-68920
vopros
2002-10-01 10:57
2002.10.21
Что делать? Как жить?