如何将包含E-表示法的字符串解析为十进制

理查德77

我想将转换字符串返回十进制,但是很少有行抛出异常(请参见下面的代码)。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用任何十进制分隔符将字符串解析为十进制

WP8-C#-将字符串解析为十进制FormatException

C#将十进制字符串解析为整数不起作用

使用剃刀@ Html.textboxfor将字符串表示为货币或十进制

如何获得十进制除法的十进制字符串表示形式?

如何根据数字格式将十进制和十六进制字符串解析为int

将一个小的endian十六进制字符串解析为十进制

将拉丁文1个字符的字节解码为十进制表示的字符串

如何将字符串3.0E-4转换为十进制

如何将十进制科学计数法float / double转换为普通字符串

WCF将十进制序列化为字符串,精度为2十进制

如何将十六进制的 ipv6 字符串以 : 分隔为 PostgreSQL 中的十进制

将字符串从科学计数法格式化为十进制数

将字符串中的指数值转换为不带指数表示法的十进制表示形式

C#:如何将十进制转换为字符串而不转换为指数表示

如何将二进制字符串转换为十进制?

如何将二进制字符串值转换为十进制

如何将很大的十进制字符串转换为十六进制?

如何将十六进制字符串转换为十进制值

指定解释范围以将十进制字符串解释为Nat

将 float 向上舍入为 int 作为具有十进制阈值的字符串

将字符串编码为十进制数字-javascript

如何在SQL Server 2012中为字符串分配十进制值

如何在 Javascript 中将字符串编码为 Unicode 十进制

比较Python中包含十进制的字符串

如何判断以字符串表示的十进制数字是否适合双精度?

如何打印unicode字符串的十进制表示形式?

将字符串转换为十进制(“ 3942.000000000000”)

如何正确提取十进制字符串