我正在使用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/