int countBouncy=5;
int count=999899;

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


该短语的结果是意外的,我得到零。

为什么不起作用?

最佳答案

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

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


这样,c#编译器将countBouncy显式转换为double,并将count隐式转换为double,以使其与(现在为doublecountBouncy兼容。

否则,由于(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

关于c# - 浮点数乘法返回意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12868662/

10-10 17:52