c#百分比计算说明

c#百分比计算说明,c#,percentage,C#,Percentage,我对c语言中的百分比计算有一些理解上的问题# 为什么会这样 100 * usedDiskSpace/maxDiskSpace 这不是 ((usedDiskSpace/maxDiskSpace)*100) 我不明白 为什么? 为了更好的解释。我试图计算硬盘卷的百分比。我用其他语言编程,比如Actionscript、php或JAVA。我不明白,为什么较低的计算结果会得到0值。您的操作顺序不同 您的第一个示例,100*usedDiskSpace/maxDiskSpace,与(100*usedDis

我对c语言中的百分比计算有一些理解上的问题#

为什么会这样

100 * usedDiskSpace/maxDiskSpace
这不是

((usedDiskSpace/maxDiskSpace)*100)
我不明白

为什么?


为了更好的解释。我试图计算硬盘卷的百分比。我用其他语言编程,比如Actionscript、php或JAVA。我不明白,为什么较低的计算结果会得到0值。

您的操作顺序不同

您的第一个示例,
100*usedDiskSpace/maxDiskSpace
,与
(100*usedDiskSpace)/maxDiskSpace
相同

第二个示例,
(usedDiskSpace/maxDiskSpace)*100
在乘法之前进行除法运算。在整数除法中,整数后面的任何数字都被截断。由于(大概)maxDiskSpace始终大于usedDiskSpace,因此结果将为0*100或0

为了举个例子,我们可以用一些玩具编号来解决这个问题

int a = 10;
int b = 20;

Console.WriteLine(100*a/b); // Output: 50
// 100*10/20
// (100*10)/20
// 1000/20
// 50
Console.WriteLine((a/b)*100); // Output: 0
// (10/20)*100
// (0)*100 <- 0, rather than 0.5 due to how integer division works
// 0
inta=10;
int b=20;
控制台写入线(100*a/b);//产量:50
// 100*10/20
// (100*10)/20
// 1000/20
// 50
控制台写入线((a/b)*100);//输出:0
// (10/20)*100

//(0)*100整数除法运算顺序

当你把这两个整数除以时,你会得到一个整数结果。假设您有值
40
50
。当所有的都是整数时,
40/50
就是
0
。在integer land中没有
.8
这样的东西。即使您还乘以
100
,除法已经发生,并且
100*0
仍然是
0

但是如果你先把分子乘以
100
,你会得到
4000/50
。这仍然为整数结果留出了空间:
80


这就是这里发生的事情。第一个示例首先执行乘法。第二个示例首先执行除法。

问题可能是由以下原因引起的

如果您要查找的结果是一个整数(例如
10%
),则其他答案非常有用。如果您正在寻找具有多个小数点的结果(例如<代码> 10.57%)/代码>,则考虑使用:

var bob = ((usedDiskSpace * 1.0 / maxDiskSpace) * 100);
或者更简单:

var bob = usedDiskSpace * 100.0 / maxDiskSpace;

乘以
1.0
(或
100.0
)将确保不使用整数除法(因为
1.0
100.0
在数学演算中是
double

),括号的排列是确定的。在以下表达式中:

100*usedDiskSpace/maxDiskSpace

首先100乘以usedDiskSpace,然后除以maxDiskSpace。例如:

100*50/20=5000/20=250

但在第二种情况下,计算如下:

((usedDiskSpace/maxDiskSpace)*100)

首先usedDiskSpace除以maxDiskSpace,然后乘以100。此场景中的前一个示例如下所示:

((50/20)*100)=2*100=200

请注意,如果usedDiskSpacemaxDiskSpace变量是整数类型,那么除法结果将是整数类型:

50/20=2(不是2.5)


要在上述表达式中获得相同的结果,您应该将usedDiskSpacemaxDiskSpace变量定义为浮点或双精度类型。

这是因为您进行了整数除法。只需将其转换为
float
double
即可获得所需的结果

int usedDiskSpace = 230, maxDiskSpace = 980;

// integer division
int res = 100 * usedDiskSpace / maxDiskSpace;
// 23
res = ((usedDiskSpace / maxDiskSpace) * 100);
// 0

// floating point division
float resF =100f * usedDiskSpace / maxDiskSpace;
// 23.4693871
resF = (((float)usedDiskSpace / maxDiskSpace) * 100);
// 23.4693871

如果你能提供一个(我们可以复制粘贴到一个控制台应用程序中并运行)可能的副本,那就太棒了。答案取决于所涉及的变量类型。