当超过一个小数时,双倍不工作?

Rez*_*bur 0 c# monodevelop

嘿,我是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 ();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*isF 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 ();
}
Run Code Online (Sandbox Code Playgroud)