【问题标题】:DataTable Select: double value could not filtered数据表选择:无法过滤双精度值
【发布时间】:2012-06-27 08:52:43
【问题描述】:

我正在尝试选择一个数据表对象。当我的表达式值为 82.5 (double) 时,代码抛出异常。

_dataSet.Tables[2].Select("ProfitShareRatio = " + Convert.ToDouble(_listrow[m]["ProfitShareRatio"]));

P.s : ProfitShareRatio 的值是 _dataSet.Tables[2] 的两倍

错误:

表达式中的语法错误。

在 System.Data.ExpressionParser.Parse() 在 System.Data.DataExpression..ctor(DataTable 表,字符串表达式,类型类型) 在 System.Data.Select..ctor(DataTable 表,字符串 filterExpression,字符串排序,DataViewRowState 记录状态) 在 System.Data.DataTable.Select(String filterExpression)

编辑 2: 当我使用 Decimal 时出现同样的错误。

 _dataSet.Tables[2].Select("ProfitShareRatio = " + Convert.ToDecimal(_listrow[m]["ProfitShareRatio"]));

P.s 2:问题是Convert.ToDecimal(_listrow[m]["ProfitShareRatio"]) 是返回值,带有逗号,如 82,50 我需要用 82.50 之类的点返回值

【问题讨论】:

  • 出于兴趣,_dataSet.Tables[2].Select("ProfitShareRatio = 82.5") 有效吗?您确定 _dataSet.Tables[2] 中的 ProfitShareRation 数据类型是 double 吗?那么 _dataSet.Tables[2].Columns["ProfitShareRation"].DataType 给你什么?
  • @maycil 你能给我们解释一下 _listrow[m]["ProfitShareRatio"] 吗?
  • @dash _dataSet.Tables[2].Select("ProfitShareRatio = 82.5") 正在工作。 _dataSet.Tables[2]["ProfitShareRatio"] 是十进制的。
  • @HichemC _listrow[m]["ProfitShareRatio"] 是一个比率值,可以是 1,0 到 100,00。
  • @maycil - 如果是十进制,那么为什么不使用 Convert.ToDecimal?

标签: c# string datatable


【解决方案1】:
String.Format(new System.Globalization.CultureInfo("en-US"),"ProfitShareRatio =  {0}",Convert.ToDecimal(_listrow[m]["ProfitShareRatio"]))

感谢大家。通过将文化更改为 en-US 解决了问题。字符串格式结果为“ProfitShareRatio = 82.5”

【讨论】:

  • 我之前的回答非常接近,尽管我们不知道您遇到了文化问题。
  • 是的,伙计,你是对的。我注意到不同文化机器的问题。
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 2021-10-29
  • 2021-08-13
  • 1970-01-01
  • 2017-05-24
  • 2020-07-01
  • 1970-01-01
  • 2013-02-18
相关资源
最近更新 更多