我试图计算总成功工作的百分比。 代码:
int total = valid + invalid;
int percent = (valid / total) * 100;
if (percent == 0)
{
MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid));
break;
}
如果所有工作都成功,则百分比为100%。 如果一个工作不好,百分比为0,我得到消息框: 9:8
8/9 * 100 = 88.888,而不是0.
int percent = Convert.ToInt32((valid / total) * 100);
没有结果。请帮我。 我是俄罗斯人,很抱歉英语不好。
答案 0 :(得分:3)
你的有效变量和总变量是int,这意味着你的有效/总分割将截断为一个整数,在你的情况下总是为0。
如果您将其中一个变量更改为double,则允许除法按您期望的方式执行。
int percent = Convert.ToInt32(((double)valid / total) * 100);
现在,这会导致你的if子句不再正常工作,所以你必须改变它才能检查它是不是100
所以而不是
if (percent == 0)
你想做点什么
if (percent != 100)
代替
答案 1 :(得分:3)
我猜测valid
和invalid
都被定义为int
s。在这种情况下,所有计算的结果也将是int
。
您需要在操作中将其中一个值转换为浮点类型,或者这可能更容易,将其中一个值定义为浮点类型开头:
double total = valid + invalid;
int percent = (valid / total) * 100;
答案 2 :(得分:1)
你只需要进行强制转换,这样你就不会进行整数除法并寻找浮点结果,例如:
double percent = ((double)valid / total) * 100;
答案 3 :(得分:1)
让你的行成为:
int percent = (int)(((float)valid / (float)total) * 100f);
答案 4 :(得分:1)
您的问题是您在integer(целоечисло)上操作,但要使该部门正常工作,您应该使用rational number。
当你执行8/9时,你有0,因为8低于9,所以结果将介于1和0之间。要表示介于1和0之间的数字,你必须使用浮点类型。
float total = valid + invalid;
现在该部门看起来像这样:
8 / 9.0
但这仍然没有结束,如果你将浮点数分配给整数,你将有一个编译器警告。
float result = (valid / total) * 100;
答案 5 :(得分:0)
尝试:
float total = valid + invalid;
float percent = (valid / total) * 100;
if (percent == 0)
{
MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid));
break;
}
修改强>
将百分比更改为浮动。
答案 6 :(得分:0)
在进行计算之前将您的整数转换为浮点数。
int percent = Math.Round(((float)valid / (float)total) * 100);
答案 7 :(得分:0)
你需要使用某种浮点数学而不是整数。
int total = valid + invalid;
int percent = ((decimal)valid / (decimal)total) * 100m;
答案 8 :(得分:0)
问题是(valid / total)
的结果是int
(整数),valid
和total
是ints
,所以结果是该部门将截断为整数。
解决方案是强制一个成为float
,double
或decimal
:
int percent = (int)Convert.ToInt32(((float)valid / total) * 100);
答案 9 :(得分:0)
您应该使用float
代替int
:
float percent = ((float)valid/(float)total) * 100.00f;
修改强>:
是的,我忘了将vallid
和total
投靠浮动。
答案 10 :(得分:0)
您的一个因素需要是浮点值,否则您最终会得到一个整数。
int total = valid + invalid;
int percent = (int)((valid / (float)total) * 100);
if (percent == 0)
{
MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid));
break;
}