奇怪的C#数学计算

奇怪的C#数学计算,c#,math,C#,Math,下面的代码很奇怪。当我调试它时,我可以看到“result”和“round”都是5,但输出是“false”。有什么想法吗 double result = Math.Log (243, 3); // 5 double round = Math.Round (result); // 5 Console.WriteLine (result == round); 将浮点与相等运算符进行比较可能会在舍入值时丢失精度。您可以通过比较与ε的差异来解决此问题。像这样使用公差: Console.WriteL

下面的代码很奇怪。当我调试它时,我可以看到“result”和“round”都是5,但输出是“false”。有什么想法吗

double result = Math.Log (243, 3);   // 5
double round = Math.Round (result);  // 5
Console.WriteLine (result == round);

将浮点与相等运算符进行比较可能会在舍入值时丢失精度。您可以通过比较与ε的差异来解决此问题。像这样使用
公差

Console.WriteLine(Math.Abs(result - round) < 0.0000001); // True
Console.WriteLine(Math.Abs(result-round)<0.0000001);//真的

将浮点与相等运算符进行比较可能会在舍入值时丢失精度。您可以通过比较与ε的差异来解决此问题。像这样使用
公差

Console.WriteLine(Math.Abs(result - round) < 0.0000001); // True
Console.WriteLine(Math.Abs(result-round)<0.0000001);//真的

如果你用小数怎么办?你的
结果将是
4.999999999999 1
不是
5
。我不知道你在找什么,但结果==4.9999999999991如果你用小数怎么办?你的
结果将是
4.999999999999999 1
不是
5
。我不知道你在找什么,但结果==4.99999999999991您还可以提供舍入分数
double round=Math.round(结果,15)
您还可以提供舍入分数
双舍入=数学舍入(结果,15)