Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-69045
watcher
2002-08-12 17:53
2002.10.21
разделы FAT под NT


14-68970
stany
2002-09-28 16:41
2002.10.21
Мастера,помогите-не знаю с чего начать!


14-69020
lipskiy
2002-09-26 01:36
2002.10.21
Карманный компьютер: какой выбрать? На чем пишут софт для них?


1-68686
Aleksandr
2002-10-10 16:21
2002.10.21
Делфи 7 крышей едет или я? Модуль variants хочет перекомпиляться.


1-68697
.
2002-10-10 15:52
2002.10.21
http rfc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский