c# - DataTable.Compute 计算十进制表达式时失败

标签 c# datatables evaluation

我正在使用DataTable类的Compute方法来计算和表达。 当值为整数时,计算有效;当表达式为小数时,计算失败。我收到“System.FormatException”异常。

这里是示例代码:

var dt = new DataTable();
var passingResult = dt.Compute("CONVERT('100', 'System.Decimal') > 3", null);   //works
var failingResult = dt.Compute("CONVERT('100.1', 'System.Decimal') > 3", null); //fails

最佳答案

最初我无法重现您的问题,但后来使用此代码

Thread.CurrentThread.CurrentCulture = new CultureInfo("af-ZA");
var dt = new DataTable();
var passingResult = dt.Compute("CONVERT('100', 'System.Decimal') > 3", null);   //works
var failingResult = dt.Compute("CONVERT('100.1', 'System.Decimal') > 3", null); //fails

我遇到了相同的格式错误,因此这是应用于您的代码的文化信息的问题。我可以用这段代码解决它

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
var dt = new DataTable();
passingResult = dt.Compute("CONVERT('100', 'System.Decimal') > 3", null);   //works
failingResult = dt.Compute("CONVERT('100.1', 'System.Decimal') > 3", null); //fails

不确定这是否是解决该问题的最佳方法,因为这对于使用表的代码可能会出现问题,并且我非常确定在此更改回原始值后您需要重置 CultureInfo .

看看其他人是否有更好的方法来解决这个问题。

关于c# - DataTable.Compute 计算十进制表达式时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31741759/

相关文章:

c# - Facebook JSON 字符串的反序列化?

c# - 带有 DropDownList 的 Gridview RowCommand 事件不起作用

c - 如何连接、评估和字符串化宏?

C++、海湾合作委员会 : avoid evaluation of useless expressions

jquery - 无法显示数据表中的记录数

opencv - 如何使用匹配算法评估特征描述符

c# - MassTransit - 向客户端更新消息

c# - WPF 样式中的继承反转

jquery - 使用 MDL 主题更新 jquery 数据表布局

javascript - 如何动态更新数据表中的单元格?