我想将转换字符串返回十进制,但是很少有行抛出异常(请参见下面的代码)。
Func<DataRow, string, decimal?> getFieldNullableDecimal = (row, field) =>
{
if (!string.IsNullOrWhiteSpace((row[field] ?? string.Empty).ToString()))
{
var data = row[field].ToString();
return decimal.Parse(data); //--this line is throwing exception
}
}
当数据库返回的值具有以下形式时,将引发错误:-2.8421709430404E-14
我想做的只是检查字符串是否为“ E- ”。然后,我将两个部分转换为数字,然后相乘。但是,在执行此操作之前,我想知道是否存在已经执行此操作的方法。
感谢您的帮助
您需要使用NumberStyles.AllowExponent和NumberStyles.Float。例如:
Decimal.Parse("-2.8421709430404E-14",
NumberStyles.AllowExponent | NumberStyles.Float);
像这样的东西:
if (!string.IsNullOrWhiteSpace((row[field] ?? string.Empty).ToString()))
{
return decimal.Parse(row[field].ToString(),
NumberStyles.AllowExponent | NumberStyles.Float);
}
请注意,这假设您的using语句中具有System.Globalization命名空间。例如:
using System.Globalization;
另外,正如John Skeet指出的那样,您无需将其转换为字符串然后转换为十进制。
如果它在数据库中是Float,则CLR中的等效项是Double。因此,您可以尝试将其转换为Double。例如:
return (double)row[field];
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句