如何将包含E-符号的字符串解析为十进制
How to parse a string that contains E- notation into decimal
我想 return 将字符串转换为十进制,但有几行抛出异常(参见下面的代码)。
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
}
}
当数据库 returned 的值具有以下形式时抛出错误:-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];
我想 return 将字符串转换为十进制,但有几行抛出异常(参见下面的代码)。
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
}
}
当数据库 returned 的值具有以下形式时抛出错误:-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];