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

C#如何将数字作为浮点传递给函数?,c#,decimal,C#,Decimal,我创建了一个验证函数,如下所示: public static T getAsDigit<T>( this Textbox tb, float min, float max ){ } public static T getAsDigit(此文本框tb、浮点最小值、浮点最大值){ } 大多数情况下,验证范围以整数表示。它很好用。但是当我尝试传递小数时,它会给我错误,比如说无法将double转换为float,我必须将定义更改为double 我是C#的新手,如何以浮点形式传入数字?不做

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

public static T getAsDigit<T>( this Textbox tb, float min, float max  ){
}
public static T getAsDigit(此文本框tb、浮点最小值、浮点最大值){
}
大多数情况下,验证范围以整数表示。它很好用。但是当我尝试传递小数时,它会给我错误,比如说
无法将double转换为float
,我必须将定义更改为double

我是C#的新手,如何以浮点形式传入数字?不做一些不直观的事情,比如
Convert.toFloat('1.3')


我的用例只需要3位小数精度,值范围为0.000~10.000。在C#中使用float和double有什么缺点吗?因为我在sql中使用并看到人们在十进制()可选时大量使用浮点。

使用
f
literal:
getAsDigit(1.34f)


或将值强制转换为浮点值
getAsDigit((float)1.34)
使用
f
literal:
getAsDigit(1.34f)


或者将值转换为float
getAsDigit((float)1.34)

您必须将double转换为flow,因此我建议您这样做

float.Parse(x)
更干净的选择是创建一个新的var,并将其转换为float,而不是在注入中,因此如下所示:

double x = 1.3;

var newFloat = float.Parse(x);

您必须将double转换为flow,因此我建议您这样做

float.Parse(x)
更干净的选择是创建一个新的var,并将其转换为float,而不是在注入中,因此如下所示:

double x = 1.3;

var newFloat = float.Parse(x);

我想您需要为
文本框的值编写一个验证

您可以升级方法,使其对所有值类型
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;
        } 
public static T getAsDigit(此文本框tb,T min,T max),其中T:struct,IComparable
{
var valueConverted=默认值(T);
尝试
{
valueConverted=(T)Convert.ChangeType(tb.Text,typeof(T));
}
捕获(例外e)
{
//做你想做的事,例如
}
如果(值转换。与(最大值)>0相比)
返回最大值;
如果(值已转换。比较到(最小值)<0)
返回最小值;
转换后的返回值;
} 
您只需传递所需的类型

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
string a=“10.5”//假设一个是文本框
变量b=a.getAsDigit(10,11);//返回10.5f
var c=a.getAsDigit(11,12)//返回11d
var d=a.getAsDigit(9,10)//返回10d

我想您应该为
文本框的值编写一个验证

您可以升级方法,使其对所有值类型
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;
        } 
public static T getAsDigit(此文本框tb,T min,T max),其中T:struct,IComparable
{
var valueConverted=默认值(T);
尝试
{
valueConverted=(T)Convert.ChangeType(tb.Text,typeof(T));
}
捕获(例外e)
{
//做你想做的事,例如
}
如果(值转换。与(最大值)>0相比)
返回最大值;
如果(值已转换。比较到(最小值)<0)
返回最小值;
转换后的返回值;
} 
您只需传递所需的类型

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
string a=“10.5”//假设一个是文本框
变量b=a.getAsDigit(10,11);//返回10.5f
var c=a.getAsDigit(11,12)//返回11d
var d=a.getAsDigit(9,10)//返回10d

为什么不将该函数的签名改为接受double?related:@Frode,谢谢,我就是这么做的,但我仍然很好奇如何写浮点数而不每次都使用它。@Magnus,谢谢,很抱歉我遇到了错误,虽然问题不同。你为什么不将该函数的签名改为接受double?related:@Frode,谢谢,我就是这么做的,但我仍然很好奇如何写浮点数而不必每次都使用它。@Magnus,谢谢,很抱歉我遇到了错误,尽管问题不同。谢谢,我想应该有这样的记号。不好意思,我没找到。谢谢,我想应该有这样的记号。真遗憾,我没找到它。