【发布时间】: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) 就可以正常工作了。