Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

большие числа [D7, XP]


TRSteep ©   (2009-10-13 08:12:00) 

Есть код который получает размер озу в байтах
в принципе нормально работает, но хочу выводить не в байтах, а нормальном формате (Гб, Мб)
В принципе код написал работает, но есть одно но если ОЗУ больше 4х гб то код не работает (Range Check error).
Немного почитал понял что из-за того что integer не поддерживает такие числа
Изменил integer на int64, real на Extended

В итоге приложение запускается считает, но если объем 4гб ровно - то ответ 0, если больше то считает сколько объем от 4х...

Что делать?

function sizetype(volume:integer): string;
var
 size: Extended; {real}
 i: int64; {integer}
 anser: string;
begin
 i:=0;
 size := volume;
 repeat
   anser := FloatToStr(size);
   i := i + 1;
   size := size/1024;
   //Showmessage(FloatToStr(size));
 until size<1;

 case i of
   1: Result := anser + ' b.';
   2: Result := anser + ' Kb.';
   3: Result := anser + ' Mb.';
   4: Result := anser + ' Gb.';
   5: Result := anser + ' Tb.';
 end;
end;


MonoLife   (2009-10-13 11:58:00) [1]


> плюс для использования inc нужно подключить еще один модуль

system по дефолту и так уже подключен


TRSteep   (2009-10-13 11:51:00) [2]


>
> > size := volume;
>
> зачем?  и почему тип разный?

просто не помню можно ли изменять те данные которые вводятся с функцией и тк код для проб, то пока и так пойдет

а тип разный потому, что внутри поменял, а там не углядел, попробую


> >   i := i + 1;
>
> inc(i);


i + 1 проще читать, плюс для использования inc нужно подключить еще один модуль, которого нет unit


>
> >   size := size/1024;
>
> size := size div 1024;


DIV хм... можно конечно, но так точнее :)


> http://delphidevelop.ru/publ/13-1-0-261
> вообще уже все придумано ;)

Спасибо интересно.


Anatoly Podgoretsky   (2009-10-13 10:09:00) [3]

Зато теперь кило можно поддерживать вплоть до 10^18


Плохиш   (2009-10-13 09:55:00) [4]


> palva ©   (13.10.09 09:52) [3]
>
> Попробуйте volume тоже сделать int64

Ето шо ж теперя фсю прогу переделывать? 8-O


palva   (2009-10-13 09:52:00) [5]

Попробуйте volume тоже сделать int64


brother   (2009-10-13 08:37:00) [6]

http://delphidevelop.ru/publ/13-1-0-261
вообще уже все придумано ;)


brother   (2009-10-13 08:33:00) [7]

ну и код(
для начала:

> size := volume;

зачем? и почему тип разный?

>   i := i + 1;

inc(i);

>   size := size/1024;

size := size div 1024;

ну и код(


Наверх

Титульная страница Поиск, карта сайта Написать письмо