Сконвертировать число (MB) в (GB) математическим способом

Есть число в мегабайтах, к примеру 2189MB

Нужно это число превратить в : 2.1376953125 GiB

Как пример, нашёл на одном ресурсе формулу:

2189 x 2^-10 = 2.1376953125

Как это реализовать в C# ?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Не получится потому что соотношение другое между MB и GiB. Тот результат что вы ожидаете соответствует соотношению MiB к GiB.

1 GiB = 1024·1024·1024 B

1 MB = 1000·1000 B

2189 MB = 2189·1000·1000 B

2189 MB = ((2189·1000·1000) / (1024·1024·1024)) GiB ~= 2.0386651158332825 GiB

using System;

class Program
{
    static void Main(string[] args)
    {
        const double MB_to_B = 1000 * 1000;
        const double GiB_to_B = 1024 * 1024 * 1024;
        const double B_to_GiB = 1 / GiB_to_B;
        double v = 2189;
        Console.WriteLine(v * MB_to_B * B_to_GiB);
    }
}
$ csc /nologo temp.cs

$ mono temp.exe
2.03866511583328

P.S. По числам в вопросе можно догадаться что все множители в программе двоичные. Принципы те же, код другой:

using System;

class Program
{
    static void Main(string[] args)
    {
        const double MB_to_GB = 1.0 / 1024.0;
        double v = 2189;
        Console.WriteLine("{0:0.00}GB", v * MB_to_GB);
    }
}
$ csc /nologo temp.cs

$ mono temp.exe
2.14GB
→ Ссылка