Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как округлять до сотых в большую сторону ? при делении 
:(
    Опции темы
arkady23
  Дата 15.11.2002, 20:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ, как в Delphi при делении округлять до сотых в большую сторону ?

допустим срока
var
a:real;
begin
a:=(Strtoint(Edit1.text))/3;
Edit2.text:=Floattostr(a);
end;

Получилось число 2.5678998776 округлить нужно до 2.57
  Вверх
podval
Дата 15.11.2002, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: нет
Всего: 62



Если речь идет именно о сотых, то сначала умножаем 2.5678998776 на 100, затем вызываем Round, который округляет до ближайшего целого, потом делим на 100, преобразуем в строку и выводим.
PM WWW ICQ   Вверх
AntonSaburov
Дата 15.11.2002, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Но просто так Round может и не округлить :)
У него же "банковское" округление - если число то ли нечетное, то ли четное, округлить не в ту сторону.
На community.borland.com решение от Borland
http://community.borland.com/article/0,1410,16814,00.html

function RoundUp(X: Extended): Extended;
begin
 Result := Trunc(X) + Trunc (Frac(X) * 2);
end;

Ну а в остальном предыдущее сообщение номально работает.
PM MAIL WWW ICQ   Вверх
аркадий
Дата 16.11.2002, 01:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ что сделать нужно в моём примере с Round и параметром "a" чтобы округлял в большую сторону ? Я не знаю как пользоватся Roundом .... скажите PLZ
  Вверх
AntonSaburov
Дата 16.11.2002, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Возможно, я не прав, но если уж программировать приходится, то интересно все-таки подумать самому.

Round(a*100)/100.

Ну к плавающему типу только Round надо привести. И все таки читайте документацию - RTFM.
PM MAIL WWW ICQ   Вверх
Cashey
Дата 16.11.2002, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Цитата

var
a:real;
begin
a:=(Strtoint(Edit1.text))/3;
Edit2.text:=Floattostr(a);
end;


Вообще-то все проще: функция есть такая roundto
т.е.
Edit2.text:=Floattostr(roundto(a, -2));
Правда округлит она по правилам округления. Ежли нужно как то по другому округлить, то либо со строками работай либо проверку делай if ... then.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 16.11.2002, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Прибавляешь 0.5 затем округляешь:
Код

Uses Math;

Function RoundMax(Num:real; prec:integer):real;
begin
 result:=roundto(num+Power(10, prec-1)*5, prec);
end;


До сотых соответственно будет:

Код

Function RoundMax100(Num:real):real;
begin
 result:=round(num*100+0.5)/100;
end;





--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Аркадий
Дата 16.11.2002, 03:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Написал Edit2.text:=Floattostr(roundto(a, -2));

выдаёт ошибку

[Error] Unit1.pas(71): Undeclared identifier: 'roundto'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


VIT а что такое Uses Math; и где это писать ?
  Вверх
Vit
Дата 16.11.2002, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



В любом модуле есть конструкция Uses. Поищи и ты найдёшь... Там список модулей которые используются, допиши туда Math (порядок не играет значения - в любое место, через запятую)


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 16.11.2002, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Знаешь в Delphi есть такая интересная штука: выделяешь синим (курсором мыши) неизвестную функцию и нажимаешь F1. И.. о чудо открывается хелп с синтаксисом и названием модуля в котором эта функция находится (разумеется если эта ф-ция стандартная), если нет или написана с орфографической ошибкой тогда  хелп откроется на оглавлении.
Извини за сарказм, но то, что все функции  паскаля записаны в каких-то модулях должен знать даже начинающий программер.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Cashey
Дата 16.11.2002, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Цитата

Исходный код  

Function RoundMax100(Num:real):real;
begin
result:=round(num*100+0.5)/100;
end;

А не проще ли
result:=roundto(num+0.005, -2); :D


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 16.11.2002, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Проще, но библиотека Math довольно тормознутая и большая, нет большого смысла прикомпиллировать её и использовать если нужна только такая мелочь, впрочем можно конечно и так.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 16.11.2002, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Цитата

begin
result:=round(num*100+0.5)/100;
end;

Извини, но вообще-то я думал, что это опечатка. Как ты округлишь до сотых если переменная num будет иметь больше двух знаков после запятой (я имею ввиду без roundto) а она находится в Math как не крути.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 16.11.2002, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Нет там опечатки :) А ты проверь! :)  Этот код работает, и без всякого Math


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 16.11.2002, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Твоя взяла :(


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0936 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.