我有一个表,用于存储服务器在biginit
列中的RAM量,其值为2470208。
但是我如何应用数据注释或其他验证来仅显示2而不是s470208。 ?
我的意思是总是除以1百万并得到数字左侧的数字?
答案 0 :(得分:2)
1)用于自动千位单位:
string GetByteString(long n) {
int k=0;
string u=" kMGTEP";
while(n>1024) {
n>>=10;
k++;
}
return n.ToString() + u[k];
}
呼叫:
string s= GetByteString(1234567890123);
Debug.WriteLine(s);
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;
答案 1 :(得分:1)
您标记了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));
}