加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从DataReader中解析小数

发布时间:2020-12-15 17:48:17 所属栏目:百科 来源:网络整理
导读:我找到了这个错误的解决方法,但我现在真的好奇为什么会发生这种情况,想知道是否有其他人有这个错误. 我的功能如下: public void Blog_GetRating(int blogID,ref decimal rating,ref int voteCount){ // Sql statements // Sql commands if (DataReader.Read
我找到了这个错误的解决方法,但我现在真的好奇为什么会发生这种情况,想知道是否有其他人有这个错误.

我的功能如下:

public void Blog_GetRating(int blogID,ref decimal rating,ref int voteCount)
{
    // Sql statements
    // Sql commands

    if (DataReader.Read())
    {
        // this line throws a 'Input string was not in a correct format.' error.
        rating = decimal.Parse(DataReader["Rating"].ToString());

        // this works absolutly fine?!
        decimal _rating = 0;
        decimal.TryParse(DataReader["Rating"].ToString(),out _rating);

        rating = _rating;
    }
}

以前有人见过吗?

如果我输入这个,那甚至更奇怪的是:

rating = decimal.Parse("4.0");

这工作正常,4.0是从我的DataReader出来的.

正如我之前所说的,TryParse方法工作正常,所以它不会阻止我携带,但现在我真的很想知道是否有人有答案.

期待一些回复!

肖恩

编辑 – 已解决

十进制.Parse方法工作正常,第二次运行函数(处于循环中),一个帖子没有被评级,因此数据读取器返回了一个空值.在SQL中计算COALESCE围绕我的计算解决了问题.因此,正如你所说,为什么tryparse方法没有抛出异常,只是将默认值0保持为_rating.

解决方法

对我来说这看起来并不奇怪.

Decimal.Parse()应该为坏格式抛出异常. Decimal.TryParse()不会抛出该异常,而是返回false.踢球者是你没有检查Decimal.TryParse()的返回值.我会给你真正的好机会,Decimal.TryParse()为每个导致Decimal.Parse()异常的输入返回false,并在其他地方返回true.当Decimal.TryParse()返回false时,输出参数始终只是“0”.

一个可能的警告是本地化.如果Decimal.Parse()抱怨看似正常的输入,您可以检查服务器上使用的数字格式(当前文化)是否使用逗号而不是小数来将系数与尾数分开.但鉴于你的“4.0”测试工作正常,我怀疑这是问题所在.

最后,在从数据读取器进行此转换时,您应该考虑数据读取器的源列类型.如果可能已经是小数.为什么将它转换为字符串只是为了将其转换回来?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读