关于 C# DataTable.Compute() 的语法

5 c# datatable

在尝试寻找一个简单的 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,但没有任何帮助。

Ped*_*ias 1

我在 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)

无穷大的概念存在于双重中。我不确定为什么你会在最后一个上得到例外。希望有人能对此发表评论。