代码之家  ›  专栏  ›  技术社区  ›  Ben

如何将数字作为浮点数传递给函数?

  •  1
  • Ben  · 技术社区  · 7 年前

    我创建了一个验证函数,如下所示:

    public static T getAsDigit<T>( this Textbox tb, float min, float max  ){
    }
    

    大多数情况下,验证范围是以整数表示的。它工作得很好。但是当我试图用小数来传递时,它会给我一些错误,比如 can't convert double to float ,我得把定义改为双精度。

    我是C#的新手,我怎么能把数字当作浮点来传递呢?不做不真诚的事 Convert.toFloat('1.3') .

    我的用例只需要3个小数位的精度,值范围是0.000~10.000。在C中使用float和double有什么缺点吗?因为我在sql中经常使用float,而decimal()是可选的。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Backs    7 年前

    使用 f 字面意义的: getAsDigit(1.34f)

    或将值转换为浮点值 getAsDigit((float)1.34)

        2
  •  0
  •   Micheal    7 年前

    你必须将双精度转换为flow,所以我建议你这样做

    float.Parse(x)
    

    cleaner选项是创建一个新的var,并将其转换为浮动在那里,而不是在注入中,如下所示:

    double x = 1.3;
    
    var newFloat = float.Parse(x);
    
        3
  •  0
  •   Antoine V    7 年前

    我想你应该为 TextBox .

    您可以升级方法,使其成为所有值类型的泛型 struct

            public static T getAsDigit<T>(this TextBox tb, T min, T max) where T : struct, IComparable<T>
            {
                var valueConverted = default(T);
                try
                {
                   valueConverted = (T)Convert.ChangeType(tb.Text, typeof(T));
                }
                catch(Exception e)
                {
                    //do something you want, rethown i.e
                }
                if (valueConverted.CompareTo(max) > 0)
                    return max;
    
                if (valueConverted.CompareTo(min) < 0)
                    return min;
    
                return valueConverted;
            } 
    

    你可以简单地传递你想要的类型。

    string a = "10.5"; // suppose that a is TextBox.Text
    var b = a.getAsDigit<float>(10,11); // return 10.5f
    var c = a.getAsDigit<decimal>(11,12); //return 11d
    var d = a.getAsDigit<double>(9,10); //return 10d