多于一位小数时 Double 不工作?
Double not working when more than one decimal?
嘿,我绝对是 c# 的初学者。我试着做一个简单的数学问题,它问你关于乘法的问题。我使用 "double" 作为变量,当答案小于 than/equals 到一位小数时,它说答案是正确的,但是当答案大于一位小数时,即使我是正确的,它也会说你错了任何帮助如何解决这个问题?谢谢
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 ();
}
}
}
}
问题是由于舍入错误造成的。
不可能将所有浮点数准确表示为类型 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 ();
}
嘿,我绝对是 c# 的初学者。我试着做一个简单的数学问题,它问你关于乘法的问题。我使用 "double" 作为变量,当答案小于 than/equals 到一位小数时,它说答案是正确的,但是当答案大于一位小数时,即使我是正确的,它也会说你错了任何帮助如何解决这个问题?谢谢
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 ();
}
}
}
}
问题是由于舍入错误造成的。
不可能将所有浮点数准确表示为类型 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 ();
}