C#简易数学函数
我正试图计算成功工作总数的百分之一。 代码: 如果所有作业都成功,则百分比为100%。 如果一个作业不好,则百分比为0,并且我会收到带有以下内容的messagebox: 9:8 8/9*100=88.888,不是0C#简易数学函数,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
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;