powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Перевести число в строку с единицей измерения (КБайт)
11 сообщений из 11, страница 1 из 1
Перевести число в строку с единицей измерения (КБайт)
    #39906031
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Подскажите, может быть уже существует функция, которая может перевести int в кило или мегабайты ?
В частности, длину строки или файла.

Например, такое:

Код: c#
1.
2.
3.
4.
1023 return "1023 Байт"
1024  return "1 КБ"
5000 return "4.8 КБ"
1 073 741 824+102МБ return "1.1 ГБ"  //С округлением



Ну, наверное на вход она ещё должна получать некий список с единицами измерения.
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906035
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

нету, пишется за две минуты
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906124
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

важно решить, нужны кило- или киби- :)
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
using System;
                    
public class Program
{
    private const int ONE_KB = 1024;
    private const int ONE_MB = ONE_KB * ONE_KB;
    private static string[] units = new[] { "Байт", "КБ", "МБ", "ГБ", "ТБ" };
    
    public static void Main()
    {
        Console.WriteLine(ToString(102));
        Console.WriteLine(ToString(1023));
        Console.WriteLine(ToString(1024));
        Console.WriteLine(ToString(5000));
        Console.WriteLine(ToString(1073741824 + 102 * ONE_MB));
        Console.WriteLine(ToString(10000073741824));
    }
    
    private static string ToString(double n)
    {
        var i = 0;
        
        while (n + 1 > ONE_KB && i < units.Length - 1)
        {
            n /= ONE_KB;
            i++;
        }
        
        return $"{n} {units[i]}";
    }
}
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906211
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Спасибо за ответ и пример.

Но пример всё таки писать несколько дольше, чем 2 минуты, даже больше 2 часов :)
Текущий пример работает не совсем так, как надо.

Программа выдаёт ответ:
Код: c#
1.
2.
3.
4.
5.
6.
102 Байт
1023 Байт
1 КБ
4,8828125 КБ //это части битов ?)
1,099609375 ГБ
9,09501408552751 ТБ


Думаю, никому не интересно смотреть на байты, в масштабах 10ТБ.
Предполагалось, что ToString должен выводить с округлением до десятых(сотых или тысячных) в соответствии с правилами мат. округления.

Когда речь идёт о МБ, то точность до КБ,
Когда речь идёт о ПетаБайте, то точность уже до ТБ,
т.е. точность на одну ступень ниже целого числа. /1000
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906245
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class Program
    {
        public static class FileSize
        {
            static readonly string[] Units =  { "B", "KB", "MB", "GB", "TB", "PB" };
            public static string ToString(long bytes)
            {
                var counter = 0;
                var number = (double)bytes;
                while (Math.Round(number / 1024) >= 1)
                {
                    number /= 1024;
                    counter++;
                }
                return $"{number:n1} {Units[counter]}";
            }
        }

        static void Test(long b)
        {
            Console.WriteLine($"{b, 14} => {FileSize.ToString(b)}");
        }

        static void Main(string[] args)
        {
            Test(0);
            Test(123);
            Test(1234);
            Test(12345);
            Test(123456);
            Test(1234567);
            Test(12345678);
            Test(123456789);
            Test(1234567890);
            Test(12345678901);
            Test(123456789012);
            Test(1234567890123);
            Test(12345678901234);
        }
    }




Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
             0 => 0,0 B
           123 => 123,0 B
          1234 => 1,2 KB
         12345 => 12,1 KB
        123456 => 120,6 KB
       1234567 => 1,2 MB
      12345678 => 11,8 MB
     123456789 => 117,7 MB
    1234567890 => 1,1 GB
   12345678901 => 11,5 GB
  123456789012 => 115,0 GB
 1234567890123 => 1,1 TB
12345678901234 => 11,2 TB




так? )
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906253
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B
Спасибо за ответ и пример.

Но пример всё таки писать несколько дольше, чем 2 минуты, даже больше 2 часов :)
Реально думаете, что я всё это время писал вам пример? Вы себе льстите :)
Первый ответ я написал из дома с планшета.
Когда добрался до рабочего компа, тогда и потратил две минуты, написать код.

Valery_B
Думаю, никому не интересно смотреть на байты, в масштабах 10ТБ.
Предполагалось, что ToString должен выводить с округлением до десятых(сотых или тысячных) в соответствии с правилами мат. округления.

Когда речь идёт о МБ, то точность до КБ,
Когда речь идёт о ПетаБайте, то точность уже до ТБ,
т.е. точность на одну ступень ниже целого числа. /1000
Думаю, что вы могли бы и сами заменить
Код: c#
1.
$"{n} {units[i]}" 

на
Код: c#
1.
$"{n:n1} {units[i]}"

:)
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906341
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

а я вообще скипипастил код, который нагуглил за 10 секунд
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906388
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Valery_B,
так? )

В принципе да :)
Только я решил дописать, что бы он не выводил 1023.0 байт.
Код: c#
1.
2.
3.
4.
5.
6.
7.
if (number<1024)
 return $"{number:n0} {Units[counter]}";
....
1023 => 1 023 B
1024 => 1,0 KB
2000 => 2.0 KB
1024*1024+(1024*99) => 1,1 MB


Сказать честно, "/=" - для меня вообще какой то древний Китайский символ, первый раз такой вижу.
hVostt
нагуглил за 10 секунд

Я так тоже не умею, что там надо было написать ?)
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906394
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Я ещё немного улучшил пример, и получилась вот такая вот новогодняя ёлка :)
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
                *
               =) 12
             0 => 123
           123 => 1234
          1234 => 12345
         12345 => 123456
        123456 => 1234567
       1234567 => 12345678
      12345678 => 123456789
     123456789 => 1234567890
    1234567890 => 12345678901
   12345678901 => 123456789012
  123456789012 => 1234567890123
 1234567890123 => 12345678901234
12345678901234 => 123456789012345
...
Рейтинг: 0 / 0
Перевести число в строку с единицей измерения (КБайт)
    #39906485
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Перевести число в строку с единицей измерения (КБайт)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]