我正在尝试将指数字符串值转换为十进制,并将其与数据表Select
函数中的另一个十进制值进行比较。
var dt = new DataTable();
dt.Columns.Add("Salary", typeof(string));
dt.Rows.Add("8.83567E-05");
string userInput = "8.83567E-05";
var matchedRows = dt.Select("Convert([Salary],'System.Decimal') = " + Decimal.Parse(userInput, System.Globalization.NumberStyles.Float));
但是我收到以下错误
System.FormatException:'输入字符串的格式不正确。'
所以经过一番研究,我发现使用System.Double
可以解决我的问题
var matchedRows = dt.Select("Convert([Salary],'System.Double') = " + Decimal.Parse(userInput, System.Globalization.NumberStyles.Float));
并且有效。
但是我不想使用double
,因为它大约存储数据。我的数据最多可以有10个小数位。
是否有将字符串指数字符串值转换为十进制数据类型的方法?还是在我的情况下使用double是安全的?
根据microsoft documentation,使用double是正确的方法。(Expression
属性使用与Select
的DataTable
方法中的过滤器相同的语法)
使用科学计数法的真实文字,例如4.42372E-30,使用System.Double解析。
没有科学符号,但有小数点的真实文字,被视为System.Decimal。如果数量超过最大值或System.Decimal支持的最小值,然后将其解析为System.Double。例如:
142526.144524将转换为十进制。
345262.78036719560925667将被视为Double。