【问题标题】:About the syntax of C# DataTable.Compute()关于 C# DataTable.Compute() 的语法
【发布时间】:2016-07-16 13:03:00
【问题描述】:

在尝试寻找一个简单的 C# 数学计算器时,我在下面找到了一个。 C# Math calculator

它对我来说非常理想,因为它不需要任何 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.

所以我想问一下,第二行和第三行有什么问题?计算方法对待“/”是另一种方式吗?

我已阅读此内容:https://msdn.microsoft.com/en-us/library/system.data.datatable.compute.aspx,但没有任何帮助。

【问题讨论】:

  • here。它与计算在后台使用的数据类型有关。如果你尝试var divByZero = 2 / 0;,你会得到编译错误
  • @Nitro.de 我认为我的问题与您提到的问题不同。由于我没有声明任何 double 或 int,所以我只是使用 writeline 来查看结果。
  • 对,你不知道,但你知道计算在后台做什么吗?
  • @Nitro.de 那么应该转换成对应的类型吧?顺便说一句,我找到了一种解决方法。例如,如果代码是:Expression = "2 / 0"; new DataTable(Expression).Compute(Expression, null),我可以把它改成:new DataTable().Compute("1.0 * " + Expression, null) 就可以正常工作了。

标签: c# datatable


【解决方案1】:

已经回答了这个问题的一部分: Why is infinity printed as "8" in the Windows 10 console?

我们有一个应用程序在 Windows 8.1 上会为诸如“1 / 0”之类的表达式打印“Infinity”。在 Windows 10 上,它返回“8”。

这不是 8 的数值,而是显示不正确的 Unicode 字符(应该是 dead-8)。

【讨论】:

    【解决方案2】:

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

    来自我的测试代码:

            var result = (double) new DataTable().Compute("20 / 0", null);
    
            if(double.IsInfinity(result))
            {
                Console.WriteLine("Oh noes!"); // Debugger lands here
            }
            Console.WriteLine(result);
        }
    

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

    【讨论】:

    • 嗨@pedro-g-dias,你的意思是在你的第三个表达式上有“100.0 / 0”吗?对我来说,整数和浮点计算之间似乎存在差异。使用浮点数,抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2014-10-28
    • 2011-02-12
    相关资源
    最近更新 更多