嘿,我是c#的绝对初学者。我试着写一个简单的数学问题,问你有关乘法的问题。我使用" double"作为变量,当答案小于/等于一位小数时,它表示答案是正确的,但当答案超过一位小数时,即使我是正确的,任何帮助如何解决这个问题也会说你错了?感谢
using System;
namespace Mathsquiestion {
class MainClass {
public static void Main (string[] args) {
double n1 = 1.1;
double n2 = 1.1;
double answer;
Console.WriteLine ("what is " + n1 + " times " + n2);
answer = Convert.ToDouble (Console.ReadLine ());
if (answer == n1 * n2) {
Console.WriteLine ("Well done!");
Console.ReadKey ();
}
if (answer != n1 * n2) {
Console.WriteLine ("You have to practice some more!");
Console.WriteLine ("<<Press space to terminate>>");
Console.ReadKey ();
}
}
}
}
答案 0 :(得分:7)
问题是由于舍入错误造成的。
无法准确地将所有浮点数表示为类型double
- 甚至可以像1.1或2.3那样。这意味着当你将它们相乘时,得到1.2099999(例如)而不是1.21。
您正在针对计算值对用户的答案(1.21)进行相等测试,但它将失败。
如果您切换到使用decimal
类型,这些问题应该自行解决 - 至少对于您在此处使用的小数字而言。
另一个解决方案是测试两个数字之间的差异是否小于某个小数量(例如0.000001):
if (Math.Abs(answer - n1 * n2) < 0.000001)
{
Console.WriteLine ("Well done!");
Console.ReadKey ();
}