| Структура программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Генерация GUID как строки Комплексные числа, Есть ли такие в Delphi? Когда возникает событие OnExit компонента UpDown. Динамические массивы DBGrid и Charcase Обработчик события OnFilterRecord клиент\сервер......., клиент\сервер как....? именованный поток (ntfs), какие есть средства? mailslot, нужна помощь Как задать идентификатор узла TreeView ?, Идентификатор узла в TreeView StringGrid - как удалить строку в run-time Терминальные сессии, Программирование в TS API Какое условие поставит для Edit в Delphi ? MP3 Decoder, изменение формата с MP3 на другой Сравнение текста Как распечатать Html страницу из TCppWebBrowser GetTcpTable TMediaPlayer, MediaPlayer and FullScreen MDI или SDI?, и другие вопросы... Kylix GPL Window, Under Mandrake 9.0 Dolphin StringGrid-как задать Default высоты строки Символы Не работает FTP-соединение :( Определение high-order word Многосрочный Grid, Многосрочный Grid Работа с wav'чиком, Нужна помощь Соединение баз как VFP, Я хочу вставит GRID два поля связанных т Как округлять до сотых в большую сторону ?, при делении Нужна помощь Еще раз о SQL Проблема, Как распознать кодировку в Мемо? Как Вы относитесь к курящим девушкам? Alt, Shif, Ctrl в WM_KEYUP Как преобразовать GIf в BMP, простым способом?, GIFtoBMP В основном вопрос к Vit`у, интересный вопрос! Select item, В ComboBox DateBase и тип Date Работа с базами данных, Кому это надо? SQL в Delphi6, формат даты в SQL Создание кнопки во время работы Как изменить что нить компонента на чужой форме?, если не известно его имя? Помогите с winsock.pas Отмена стандартной реакции компонента UML и Delphi, есть ли инструменты? Память Экспорт функций MSHTML_TLB.pas, ошибка при импорте Как добраться,и запустить что нить из аплета?, Аплет "свойство экрана" WM_XBUTTONUP,WM_XBUTTONDOWN,WM_XBUTTONDBLCLK Округление дробной части числа Две проги, Достали две проги SQL в ADO, Как правильно нап. запрос для ACCESS WinSock Курсор "Лапа", Как прицепить свой курсор к канве ещё раз о создании...., как добавить иконку в попап меню? Перетаскивание формы, Какое сообщение? Toolbar for IE, ---------------- Ловим чатовские мессаги, Ловим чатовские мессаги Отправка E-Mail, через COM интерфейс Outlook. Перебор элементов. Toolbar for IE, ---------------- Работа в Delphi c Access Загрузка файлов, Загрузка файлов в уже запущенную прогу ПАМАГИТЕ !!!, Посоветуйте книгу или сайт для новичка. Глюки с иконками, Иконки из ехе не работает!!! Каким образом организовать массив разнотипных элем, Создание массива разнотипных элементов Linux, Какой Linux лучше??? Помогите определить язык прогр. плз Как Вы относитесь к курящим девушкам? ScrollBar, Как запретить ScrollBar? |
Платные хостинги Раскрутка сайта Книги по программированию Округление дробной части числа
- Ребята! Помогите, пожалуйста, попроще решить задачу: нужно округлить десятичную дробь до заданного кол-ва знаков после запятой, но так, что бы в случае если изначальное число не имеет такой разрядности в ее конец добавлялись нули до нужной длины? Прим. (roundto убирает лишние цифры но не добавляет не достающие). - недостающие цифры убираются всегда. Например:I:=2.100000000;Showmessage(floattostr(i));покажет 2.1Так что добавление нулей к числовым типам бессмысленно.Используйте строки, для формирования строки используйте команду Format - она может обрезать (не округлять) числа до нужного количества знаков и добавлять недостающие нули. См. хэлп по этой команде - Вот тебе например с точностью до 5ти знаков:Код var i:real;begin I:=2.100000000; Showmessage(Format('%.5f',[i]))highlightSyntax('delphiIyMzhl','delphi'); - Вот алгоритм написал за 5 минут, корявый, наверное, и неэффективный, впрочем судить вам :function RoundN(Value:Real; Digits:Byte): Real;var I, DigitsCnt: Byte;begin while Value-Trunc(Value*10)<>0 do begin Value := Value*10; DigitsCnt := DigitsCnt+1; end; for I:=DigitsCnt-Digits downto 0 do Value:=Trunc(Value+0.5)/10; Result:=Value/10^(DigitsCnt-1); //Vit, "^" - it's not a power?end; - Ага, только функции ^ в Дельфи нет (точнее она обозначает совсем другое), и обрезать то она обрезает, только нули не доставляет, как автор просил... А для округления надо использовать Round а не Int (или на крайняк добавлять 0.5) - Вит, извини, я сделал ошибку, но сразу ее увидел. И когда исправлял, твоего сообщения еще не было. Так должно работать. - Если у тебя число 2.3, то в памяти оно хранится точно так же как и 2.30000 (в типе Real). А если ты хочешь, чтобы функция возвращала еще и нули, то надо возвращать указатель на строку, в которой это число. - Знаешь, а мой код компактнее :Format('%.5f',[i])PS.^ - это не возведение в степень. Это либо обозначения типа указателя:Type PMyBool=^Boolean;Либо обращение к содержимому по адресу:var a:boolean b:^boolean;...a:=b^; - Твои код только выводит с нулями, а мой округляет нужное количество цифр. Внимательно прочитай. - И с округлением, и с добавлением незначащих цифр, и с заранее устанавливаемой точностью. Вроде бы все условия соблюдены...Код function RoundN(Value:Real; Digits:Byte): string;begin result:=Format('%.'+inttostr(Digits)+'f',[roundto(Value,-Digits)]);end;highlightSyntax('delphiNmZjA=','delphi'); - А вот в старом пасе была ф-ция Str:PReal: real;buf: string;...Str(PReal:3:4,buf);И все ?! - Можно и так, только она обрежет, а не округлит, собственно Format использует тот же механизм что и Str, только возможностей там больше... - А код этой функции не приведешь (roundto, несмотря на то что она, скорее всего, стандартная)? В принципе она делает тоже что и моя или нет?Цитата Можно и так, только она обрежет, а не округлит, собственно Format использует тот же механизм что и Str, только возможностей там больше... Только вот в задачах лучше использовать свои функции, оптимизированные под поставленную задачу. А все удобство требует память и время для обработки. - Согласен |