c#判断内容是否可以转为数值或数字格式的方法

一、背景

  在从Excel中获取内容时,经常遇到数字类型的数据,当我们想要将这些数字格式的数据转放到实体类中时,如果不考虑判断直接使用xxx.Parse()或者Convert.Toxxx()当遇到某些数据格式不正确的时候会报数据格式异常的错误提醒。为了让程序更好的运行,有更高的容错性,需要对数据先有个判断。

二、使用的方法

  在网上寻找相关解决方法时,有些人喜欢使用正则表达式来处理。不过对于单纯的数字而言,表达式还是比较简单好使的,但是涉及到小数点的时候,需要分情况来进行编写程序判断。对于喜欢简化的人来说这还是比较痛苦的。
  幸好,我还找到了一个更加简便的方法,几乎可以用一句话来解决这个问题,这就是decimal.TryParse(),通过这个方法可以判断所传入的内容是否可以转为数值格式。代码如下所示:

decimal dec = 0;//定义一个数值
if(decimal.TryParse(string, out dec))
{
    //转化成功后可以直接使用dec的内容了
}

  有了这个方法一下子帮我解决了许多问题,我不必为了一个数值的错误而在Excel中反复查找错误的原因,但是在实际使用Excel时还会遇到一个叫科学计数法的内容。明明在Excel中是一个数值,但是当从Excel中读取出来是就成了类似11E-03格式的数值,这个通过上述的方法简单判断就又不行了,他会默认这是一个普通的带字母的字符串,无法转为数值。这时,我们还需要对此类科学计数法进行格式判断,通常遇到这类情况第一反应还是使用正则表达式,但是我们还是可以使用上述的方法(不过需要更改一下)来简单的实现此类效果。代码如下:

// 如果不是普通的数值而是以科学计数法存在的判断能否转成数值类型
NumberStyles style = NumberStyles.Float | NumberStyles.Integer;
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB");
if (decimal.TryParse(key.FindByName(item.Name), style, culture, out dec))
{
    //转化成功后可以直接使用dec的内容了
}

在官网上这个方法比我现在使用的还要强大,如果感兴趣的可以参考官网上的介绍:Decimal.TryParse 方法 ;其中对于NumberStyles还是好理解的,就是对应的数据格式,但是对于后面的CultureInfo乍一看不是好理解的,理解之后就明白这是对相应的数据的一种格式分析,这里我提供官方提供的详细介绍,看完之后收获还是挺大的:IFormatProvider 接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值