Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#简易数学函数_C# - Fatal编程技术网

C#简易数学函数

C#简易数学函数,c#,C#,我正试图计算成功工作总数的百分之一。 代码: 如果所有作业都成功,则百分比为100%。 如果一个作业不好,则百分比为0,并且我会收到带有以下内容的messagebox: 9:8 8/9*100=88.888,不是0 int percent = Convert.ToInt32((valid / total) * 100); 没有结果。请帮帮我。 我是俄罗斯人,很抱歉英语不好。试试: float total = valid + invalid; float percent = (valid / t

我正试图计算成功工作总数的百分之一。 代码:

如果所有作业都成功,则百分比为100%。 如果一个作业不好,则百分比为0,并且我会收到带有以下内容的messagebox: 9:8

8/9*100=88.888,不是0

int percent = Convert.ToInt32((valid / total) * 100);
没有结果。请帮帮我。 我是俄罗斯人,很抱歉英语不好。

试试:

float total = valid + invalid;
float percent = (valid / total) * 100;
if (percent == 0)
{
  MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid));
  break;
}
编辑:


将百分比也更改为浮点。

您的有效和总计变量为int,这意味着您的有效/总计除法将截断为整数,在您的情况下,该除法将始终为0

如果将其中一个变量更改为双精度变量,将允许除法按预期方式执行

int percent = Convert.ToInt32(((double)valid / total) * 100);
现在,这将导致if子句不再正常工作,所以您必须更改它,以检查它是否不是100

所以不是

if (percent == 0)
你会想做一些类似的事情

if (percent != 100)

相反,在进行计算之前,将整数转换为浮点数

int percent = Math.Round(((float)valid / (float)total) * 100);

您需要使用某种浮点数学,而不是整数

int total = valid + invalid;
int percent = ((decimal)valid / (decimal)total) * 100m;

问题是
(有效/总计)
的结果是
整数
(整数),因为
有效
总计
整数
,所以除法的结果将截断为整数

解决方案是强制一个为
浮点
双精度
十进制

int percent = (int)Convert.ToInt32(((float)valid / total) * 100);

我猜
valid
invalid
都被定义为
int
s。在这种情况下,所有计算的结果也将是
int
s

您需要在操作中将其中一个值强制转换为浮点类型,或者(这可能更容易)首先将其中一个值定义为浮点类型:

double total = valid + invalid;
int percent = (valid / total) * 100;

您应该使用
float
而不是
int

float percent = ((float)valid/(float)total) * 100.00f;  
编辑

是的,我忘了将
vallid
total
转换为浮点。

其中一个因子必须是浮点值,否则结果就是一个整数

int total = valid + invalid;

int percent = (int)((valid / (float)total) * 100);

if (percent == 0)
{
    MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid));
    break;
} 

您只需对强制转换进行更多操作,这样您就不会进行整数除法并寻找浮点结果,例如:

    double percent = ((double)valid / total) * 100;
让您的线路成为:

int percent = (int)(((float)valid / (float)total) * 100f);

您的问题是您在(чччччччччччччччччч109

当执行8/9时,有0,因为8比9小,所以结果将在1和0之间。要表示介于1和0之间的数字,必须使用浮点类型

float total = valid + invalid;
现在,部门如下所示:

 8 / 9.0 
但这还没有结束,如果将浮点数指定给integer,则会出现编译器警告

float result = (valid / total) * 100;

你在做整数除法…原因是一个整数除以另一个整数总是给你一个整数。如果你把一个整数除以一个浮点数,你会得到一个浮点数。所以你的值被四舍五入到最接近的整数(0或1),然后乘以100。你忘记了对整数的转换,上面的第二行不是会给出一个编译器错误吗?(隐式地将“float”转换为“int”)是的,将“percent”作为float可能是个好主意,因为原始帖子说他想要“88.888”。好主意。在转换为浮点进行乘法之前,(valid/total)不是一个整数的问题吗。另一个值得注意的选项(如果您只需要一个整数)是您可以更改计算顺序。(valid*100)/total将起作用(当然,您必须注意,最终结果将是一个整数,而不是以通常预期的方式进行四舍五入)。
float result = (valid / total) * 100;