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

Вниз

большие числа   Найти похожие ветки 

 
TRSteep ©   (2009-10-13 08:12) [0]

Есть код который получает размер озу в байтах
в принципе нормально работает, но хочу выводить не в байтах, а нормальном формате (Гб, Мб)
В принципе код написал работает, но есть одно но если ОЗУ больше 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;


 
brother ©   (2009-10-13 08:33) [1]

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

> size := volume;

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

>   i := i + 1;

inc(i);

>   size := size/1024;

size := size div 1024;

ну и код(


 
brother ©   (2009-10-13 08:37) [2]

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


 
palva ©   (2009-10-13 09:52) [3]

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


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


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

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


 
Anatoly Podgoretsky ©   (2009-10-13 10:09) [5]

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


 
TRSteep ©   (2009-10-13 11:51) [6]


>
> > 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
> вообще уже все придумано ;)

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


 
MonoLife ©   (2009-10-13 11:58) [7]


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1255334323
Kolan
2009-10-12 11:58
2009.11.29
SelLength и юникод


4-1223938181
Ruzzz
2008-10-14 02:49
2009.11.29
как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST


8-1201532748
гость
2008-01-28 18:05
2009.11.29
image refresh определенной области


2-1255591239
Диман
2009-10-15 11:20
2009.11.29
Установка фокуса у компонента


15-1254256215
Юрий
2009-09-30 00:30
2009.11.29
С днем рождения ! 30 сентября 2009 среда