zoukankan      html  css  js  c++  java
  • 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 比较安全吧。当然,只是个人建议。呵呵!

  • 相关阅读:
    基于散列的集合 HashSetHashMapHashTable
    英文工作邮件
    英语日常口语
    统计数组中各个元素出现的次数,元素取值范围为:1到N
    编写一个程序,指定一个文件夹,能自动计算出其总容量
    四则运算随机生成100题
    常用异常处理情况
    第三讲 动手动脑-2
    第三讲 动手动脑-1
    使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象
  • 原文地址:https://www.cnblogs.com/damonlan/p/2011782.html
Copyright © 2011-2022 走看看