C# 检索存储为MB的值

C# 检索存储为MB的值,c#,C#,我有一个表,它在一个biginit列中存储服务器的RAM量,该列的值为2470208 但是我如何应用数据注释或其他验证来仅显示2而不是s470208 我的意思是总是除以100万,得到数字左边的数字?您标记了C,但提到了一个bigint列,因此不清楚您是在寻找数据库还是C解决方案。下面的C方法将字节数作为整数,并返回格式化字符串 public string FormattedBytes(long bytes) { string units = " kMGT"; double log

我有一个表,它在一个biginit列中存储服务器的RAM量,该列的值为2470208

但是我如何应用数据注释或其他验证来仅显示2而不是s470208


我的意思是总是除以100万,得到数字左边的数字?

您标记了C,但提到了一个bigint列,因此不清楚您是在寻找数据库还是C解决方案。下面的C方法将字节数作为整数,并返回格式化字符串

public string FormattedBytes(long bytes)
{
    string units = " kMGT";
    double logBase = Math.Log((double)bytes, 1024.0);
    double floorBase = Math.Floor(logBase);

    return String.Format("{0:N2}{1}b",
        Math.Pow(1024.0, logBase - floorBase),
        units.Substring((int)floorBase, 1));
}

1.将其用于自动装置:

string GetByteString(long n) {
    int k=0;
    string u=" kMGTEP";
    while(n>1024) {
        n>>=10;
        k++;
    }
    return n.ToString() + u[k];
}
电话:

2但如果您总是想要MB,只需将其偏移20:

long n = 123456789;
string MB = (n>>20).ToString();
但如果n低于1MB,则显示为0

原因:

1 kB = 2^10 = 1<<10 = 1024;  
1 MB = 2^20 = 1<<20 = 1024*1024 = 1048576;  
1 GB = 2^30 = 1<<30 = 1024*1024*1024 = 1073741824;

您要求的不是整数除法2470208/1000000=2吗?如果是,那又怎样?如果值是以兆字节存储的,那么你应该除以1024,而不是100万。@nozari-这取决于他是否卖东西-你知道HDD兆字节比程序员的小:
1 kB = 2^10 = 1<<10 = 1024;  
1 MB = 2^20 = 1<<20 = 1024*1024 = 1048576;  
1 GB = 2^30 = 1<<30 = 1024*1024*1024 = 1073741824;