![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тупой вопрос: как перевести байты в Кб, Мб? :)
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 чтобы отсечь нужную часть.