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

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

Тупой вопрос: как перевести байты в Кб, Мб? :)


Страницы:   1 2 3

Mental_Ray ©   (2004-07-24 19:49:00) 

Люди подскажите, на сколько нужно разделить кол-во байт, и с помощью какой функции можно округлить до сотых. :)


Fay   (2004-07-26 17:52:00) [21]

2Mental_Ray ©   (26.07.04 16:34) [31]
Ужасно. floattostr(trunc(несколько раз - это ужасно. Способ получения размера вАщЕ зверский.


Игорь Шевченко   (2004-07-26 17:43:00) [22]

Mental_Ray ©   (25.07.04 10:18)

Windows использует целочисленное деление


Mental_Ray   (2004-07-26 16:34:00) [23]

Вот что у меня получилось:

function FileSize(Fname:string);
begin
 with TFileStream.Create(FName, fmOpenRead) do
 try
   case Size of
     0..1023:
       Result :=inttostr(Size)+' байт';
     1024..1024*10-1:
       Result :=floattostr(trunc((Size/1024)*100)/100)+' Кб';
     1024*10..1024*100-1:
       Result :=floattostr(trunc((Size/1024)*10)/10)+' Кб';
     1024*100..1024*1000-1:
       Result :=floattostr(trunc(Size/1024))+' Кб';
     1024*1000..1024*10000-1:
       Result :=floattostr(trunc((Size/1024/1024)*100)/100)+' Мб';
     1024*10000..1024*100000-1:
      Result :=floattostr(trunc((Size/1024/1024)*10)/10)+' Мб';
     1024*100000..1024*1000000-1:
      Result :=floattostr(trunc(Size/1024/1024))+' Мб';
   end
 finally
   Free
 end
end;


Надеюсь все правильно :))


Alexander1966   (2004-07-26 15:48:00) [24]

Немножко поумничаю :)

Артемий Лебедев
§ 84. Сколько байтов в килобайте?

http://www.artlebedev.ru/kovodstvo2/sections/84/


Anatoly Podgoretsky   (2004-07-26 10:36:00) [25]

Labert   (26.07.04 10:12) [27]
Ты думаешь тупой?
Нет нормальный, просто от пытается сделать это на основании системы 1000 вместо 1024


Peter   (2004-07-26 10:17:00) [26]

Предполагаю, что винда перед всеми вышеуказанными вычислениями округляет байты до трёх или четырёх значащих цифр слева вот так:
8 441 343 -> 8 441 000
А потом делит и получает:
8 441 000 / 1024^2 = 8.0499649
И трункает до двуц цифр после запятой:)


Labert   (2004-07-26 10:12:00) [27]

Действительно тупой вопрос...


Мышь   (2004-07-26 07:58:00) [28]

Очень удобная функция для округления типа
12378.123312 -> 12378.12
и
12378.123312 -> 12300
называется RoundTo. Учите MathЧасть:)


TopT   (2004-07-26 00:40:00) [29]

//И я понял почему. Байты, разделенные на (1024*1024) нужно не //округлять а просто показать с двумя цифрами после запятой! И //отсюда вытекает логичный вопрос: какая функция это делает? :)
А зачем вы пареитесь? Вы же перевели Float в string, а уж string обрезать несложно, есть процедура под названием Delete
procedure Delete(var S: string; Index, Count:Integer);


Anatoly Podgoretsky   (2004-07-25 21:37:00) [30]

Просто у них в метре 98 сантиметров.
Виндоус правильно думает и не пытается умножать на 100


SergP   (2004-07-25 21:26:00) [31]


> [18] DiamondShark ©   (25.07.04 15:39)
> Ух ты, блин! Новая единица измерения: виндовые килобайты
> ;)


Хм. это еще ничего... Нормальные люди знают что 1 кб = 1024 байт. А вот производители винтов почему-то думают что 1 кб = 1000 байт...
Так что оказывается не все думают правильно... Может винда тоже "не совсем правильно думает"?


Mental_Ray   (2004-07-25 21:05:00) [32]

Ага...


Димон   (2004-07-25 21:03:00) [33]

Anatoly Podgoretsky
А почему ты умножаешь на 100, а не 102.
Для сравнения 1.5 это не 1500, а 1024+512


Умножаю на 100 для того, чтобы сдвинуть запятую, перед Trunc. Разве не понятно из Mental_Ray ©   (25.07.04 11:23) [15] <i/>???


Piter   (2004-07-25 17:15:00) [34]

Mental_Ray ©   (25.07.04 10:18) [13]

а зачем тебе показывать как windows? Показывай ПРАВИЛЬНО. Делай лучше, чем в windows...


Юрий Зотов   (2004-07-25 16:25:00) [35]

Обязательно нужно, чтобы обсуждение этого серьезнейшего и сложнейшего вопроса вылилось не менее, чем в сотню постов. Вношу свой вклад.
:о)


DiamondShark   (2004-07-25 15:39:00) [36]

Ух ты, блин! Новая единица измерения: виндовые килобайты ;)


Sun bittern   (2004-07-25 11:37:00) [37]

Сколько вешать байтов? :)


Anatoly Podgoretsky   (2004-07-25 11:32:00) [38]

А почему ты умножаешь на 100, а не 102.
Для сравнения 1.5 это не 1500, а 1024+512


Mental_Ray   (2004-07-25 11:23:00) [39]

Смотри Mim1:

берем размер в байтах 8 441 343
делим на 1048576   (1048576=1024*1024)
получаем 8,05029201507568359375
умножаем на 100
получаем 805,029201507568359375
транк!
получаем 805
делим на 100
и...! получаем 8,05 Мб! Вроде все правильно?! Тогда почему тупая винда показывает 8,04 Мб???!!!!

Ладно, черт с ним, я думаю такое отклонение не страшно :)


Mim1   (2004-07-25 10:21:00) [40]

Trunc отсекает.
Можно утножить на 10^x чтобы отсечь нужную часть.


Страницы:   1 2 3

Наверх

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