试图运行继续返回错误答案的计算

时间:2018-04-15 09:35:36

标签: vb.net math oledb

尝试计算MCQ中的学生成绩。 30 q,4个标记为正确,-1为不正确。

当我没有放入/ 120部分时,下面的代码有效。对于具有16个正确答案和7个错误答案的记录,它返回值57,这是我想要的。但是当我试图将它除以120来得到一个百分比值时,它会返回63.94,有人可以解释这是怎么发生的或为什么会发生这种情况?

如果需要,我可以上传更多代码。

没有“/ 120”

(Math.Round(((CDbl(objAssessment1.Item("Correct")) * 4) - (CDbl(objAssessment1.Item("Wrong")))), 2))

使用“/ 120”

(Math.Round(((CDbl(objAssessment1.Item("Correct")) * 4) - (CDbl(objAssessment1.Item("Wrong"))) / 120), 2))

2 个答案:

答案 0 :(得分:0)

加法/减法前的乘法/除法

如果我们输入实际值,您得到的是:16 * 4 - 7 / 120

您真正想要的是:(16 * 4 - 7) / 120

答案 1 :(得分:0)

(Math.Round(((CDbl(objAssessment1.Item("Correct")) * 4) - (CDbl(objAssessment1.Item("Wrong"))) / 120), 2))
(Math.Round(((CDbl(16) * 4) - (CDbl(7)) / 120), 2))
(Math.Round(((16 * 4) - (7) / 120), 2))
(Math.Round(((16 * 4) - (7) / 120), 2))
(Math.Round(((64) - (7) / 120), 2))

括号中的64和7只是评估自己。

(Math.Round((64 - 7 / 120), 2))

现在记住代数的优先顺序 - 首先是乘法和除法。

(Math.Round((64 - 0.0583333333333333), 2))

现在减法。

(Math.Round(63.94166666666667, 2))

现在是Math.Round

(63.94)

删除额外的括号63.94会自行计算

63.94

整个问题是括号过多而你错过了在分组之前执行减法的设置。  jmcilhinney在评论中的建议将是理顺这一点的最好方法。这确实不是编程问题,而是算术问题。 : - )