在尝试寻找一个简单的 C# 数学计算器时,我在下面找到了一个。 C# 数学计算器
它对我来说是理想的选择,因为它不需要任何 COM 或其他第三方参考。然而,我发现一个令人困惑的事情:
new DataTable().Compute("2-3/4*12", null) // Works fine, answer is -7;
new DataTable().Compute("2 / 0", null) // Works but not correct, answer is 8;
new DataTable().Compute("100 / 0", null) // Works but not correct, answer is 8;
new DataTable().Compute("2.0 / 0", null) // Throw System.DivideByZeroException as estimated.
Run Code Online (Sandbox Code Playgroud)
所以我想问一下,第二行和第三行有什么问题吗?计算方法是否以另一种方式对待“/”?
我已阅读此内容: https: //msdn.microsoft.com/en-us/library/system.data.datatable.compute.aspx,但没有任何帮助。
我在 LinqPad 中尝试了您的代码,结果如下:
new DataTable().Compute("2 / 0", null); // Gives infinity (object{double})
new DataTable().Compute("100 / 0", null); // Gives infinity (object{double})
new DataTable().Compute("100 / 0", null); // Gives divideByZeroException
Run Code Online (Sandbox Code Playgroud)
从我的测试代码:
var result = (double) new DataTable().Compute("20 / 0", null);
if(double.IsInfinity(result))
{
Console.WriteLine("Oh noes!"); // Debugger lands here
}
Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)
无穷大的概念存在于双重中。我不确定为什么你会在最后一个上得到例外。希望有人能对此发表评论。