• float,昨天晚上被你折磨死了


    最近接了一个毕业设计的项目,到现在接近尾声了。很诡异的是,刚刚在做金额总额的时候,碰到了一个很奇怪的问题,我不知道各位童鞋有没有和我一样的经历,呵呵~~~我来分享一下吧。因因毕业设计是有关租房的,所以有一个字段是"zujin"(租金[我承认这个命名真的很恶心]),当我在models的时候,我是这样定义它的:

            /*月租金*/
            private float zujin;
            public void setZujin(float zujin) { this.zujin = zujin; }
            public float getZujin() { return this.zujin; }
    

    这里的字段是 float,没有错。然后,我做金额总和的时候,去取它的值,如下:

    protected float getZujinByHourseID(int housrID)
        {
            float zujin = 0;
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    string strSQL = "select zujin from hourse where hourseId=@hourseId ";
                    cmd.CommandText = strSQL;
                    cmd.Parameters.AddWithValue("hourseId", housrID);
                    zujin = (float)(cmd.ExecuteScalar());
                }
            }
            return zujin;
        }
    

    上面蓝色字体就是我们所关注的代码,因为在数据库中把"zujin"这个字段的类型设置为了float,所以我想在我取的时候,也应该是这个类型。

    ExecuteSclalar()这个函数是从select中取出第一行的第一条数据,在本例中也就是租金。可是,但我运行的时候,发现“类型转换错误”,报错。

    我刚开始,很纳闷。然后赶忙去检查数据库中的字段类型,然后又检查models里的类型,都没错啊!经过调试在调试之后,我就开始了最原始的办法,一个一个类型的进行转换。

    最后,功夫不负有心人,找到了这个Convert.ToSingle 函数 转换成功。然后,我刚开始以为这会对精度有影响,但后来我确认后,对精度没有影响。还好。

    自此,正确代码如下:

     protected float getZujinByHourseID(int housrID)
        {
            float zujin = 0;
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    string strSQL = "select zujin from hourse where hourseId=@hourseId ";
                    cmd.CommandText = strSQL;
                    cmd.Parameters.AddWithValue("hourseId", housrID);
                    zujin = Convert.ToSingle(cmd.ExecuteScalar());
                }
            }
            return zujin;
        }
    

    还有后面取的值,也是这样用的:

                    while (dr.Read())
                    {           
                        float LiveWater =Convert.ToSingle(dr.GetDouble((dr.GetOrdinal("LiveWater"))));
                        float Other = Convert.ToSingle(dr.GetDouble((dr.GetOrdinal("Other"))));
                        Response.Write("生活费d:" + LiveWater + "其他费用:" + Other);
                    }
    

    我这里还是觉得float,用的很不方便,一不小心 会把人给折磨怕的,就比如我吧,昨天晚上我足足的弄到了3点钟,牺牲了好多的睡眠,真实可惜。所以,我还是在建议在存储字段类型到时候,用double 比较安全吧。当然,只是个人建议。呵呵!

  • 相关阅读:
    一个asp.net MVC 的分页代码
    JavaScript教程:JavaScript如何判定用户浏览器类型和版本号?
    CutyCapt A Qt WebKit Web Page Rendering Capture Utility
    Top 10 Algorithms in Data Mining
    a c++ bloger
    设置MYSQL允许用IP访问
    QtWebKit Module
    kubuntudesktop nearly 700m,so big
    Wt, C++ Web Toolkit Introduction
    硅谷、纽约、伦敦如何演绎世界三大科技中心
  • 原文地址:https://www.cnblogs.com/damonlan/p/2011782.html
Copyright © 2020-2023  润新知