2
int countBouncy=5;
int count=999899;

double percent = (double)(countBouncy / count) * 100.0;

那句话的结果是出乎意料的,我得了零。

为什么它不起作用?

4

4 回答 4

6

您正在对 进行整数除法(countBouncy / count)。将您的代码更改为

double percent = ((double)countBouncy / count) * 100.0;

这样, c# 编译器将显式countBouncy转换为double显式count转换为double隐式转换,以使其与 (now double)兼容countBouncy

否则(countBouncy / count)计算为(5 / 999899) --> 0因为两者都是整数。


整数除法是如何工作的?举个例子:

7 / 2 = 3

整数除法会丢弃实际除法产生的小数部分。结果被截断为零。您可以使用模运算符获得此除法的其余部分

7 % 2 = 1

并像这样执行反向计算

2 * (7 / 2) + 7 % 2 = 7

您可以在 Visual Studio 的即时窗口中输入它来测试它:

?2 * (7 / 2) + 7 % 2<输入>
7

于 2012-10-13T00:03:55.953 回答
2

因为您的除法是整数除法,结果为 0,然后您其转换为双精度数。

您当前的代码实际上与以下代码相同:

int temp = countBouncy / count;  // == 0
double percent = (double)temp * 100.0;

您是否先投射其中一项:

double percent = ((double)countBouncy / count) * 100.0;

这将导致您的除法预先以双精度完成。

于 2012-10-13T00:03:56.683 回答
2

当您将 anint除以 anint时,结果始终为 an int,因此它将向下舍入到最接近的整数(零)。试试这个:

((double)countBouncy / count) * 100.0;
于 2012-10-13T00:05:00.780 回答
2

你的分子和分母都是ints。因此,得到的商是intC# 通过向下舍入到 0 来计算的。另外,您正在尝试将类型分配给double类型int。为了达到您想要的结果,请执行以下操作:

double percent = ((double) countBouncy / count) * 100.0;
于 2012-10-13T00:06:23.280 回答