2011-09-21 104 views
1

我对数学有些生疏,所以我希望有人能帮助我。使用下面的代码我想要做到以下几点:根据安装的内存量,我想显示可用内存的百分比,而不是剩下多少兆字节。如何四舍五入数字并以百分比显示?

private void timer1_Tick(object sender, EventArgs e) 
{ 
    string memory; 
    int mem; 
    memory = GetTotalMemoryInBytes().ToString(); 
    mem = Convert.ToInt32(memory); 
    mem = mem/1048576; 
    progressBar2.Maximum = mem; 
    progressBar2.Value = mem - (int)(performanceCounter2.NextValue()); 
    label2.Text = "Available Memory: " + (int)(performanceCounter2.NextValue()) + "Mb"; 


} 

//using Microsoft visual dll reference in c# 
static ulong GetTotalMemoryInBytes() 
{ 
    return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory; 
} 
+1

任何特定的原因你获取总内存,将其转换为字符串,然后将字符串转换回数字? –

+0

嗨马克...我是C#的新手,因此我的技能不好:) –

回答

2

(Available memory/Total memory) * 100将是你的百分比。

double percent = ((performanceCounter2.NextValue() * 1.0)/mem) * 100; 
label2.Text = "Available Memory: " + percent; 
+0

嗨rohit89 ...感谢您对代码的解释!完美工作。我如何四舍五入以便在小数点后不显示任何内容?谢谢 –

+0

'Math.Ceiling(百分比)'会凑整。 – rohit89

0

mem/memory将是已使用内存的百分比。为了获得可用的内存百分比,其1减去结果。但可能需要一个double

2

为了得到一个百分比,可以使用:part/total * 100,如:

var Info = Microsoft.VisualBasic.Devices.ComputerInfo(); 

var PercentAvailable = Info.AvailablePhysicalMemory*1.0/Info.TotalPhysicalMemory * 100; 
var PercentLeft = 100 - PercentAvailable; 

// or alternatively: 
var PercentLeft = (1 - Info.AvailablePhysicalMemory*1.0/Info.TotalPhysicalMemory) * 100; 
0

对于大多数新机器而言,总内存容量至少为2GB。这不适合Int32,所以你不会工作。既然你想要四舍五入,你应该使用Math.Ceiling。

ulong total = My.Computer.Info.TotalPhysicalMemory; 
ulong available = My.Computer.Info.AvailablePhysicalMemory; 
int pctAvailable = (int)Math.Ceiling((double)available * 100/total); 
int pctUsed = (int)Math.Ceiling((double)(total - available) * 100/total);