Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证小数点_C#_C# 4.0_C# 3.0 - Fatal编程技术网

C# 如何验证小数点

C# 如何验证小数点,c#,c#-4.0,c#-3.0,C#,C# 4.0,C# 3.0,请让我知道验证十进制值的好方法,如果十进制(4,2),它应该接受2位数字和2位小数 var value = "44.29"; var dec = value.Split('.'); 然后找到长度将可以使用,我需要一个更好的文化具体的方式。我需要一个通用的解决方案,可以适用于所有十进制字段 比如: 需要一个通用的清洁剂解决方案吗 private static bool IsDecimal(string value, int before, int after) { if (value.C

请让我知道验证十进制值的好方法,如果十进制(4,2),它应该接受2位数字和2位小数

var value = "44.29";
var dec = value.Split('.');
然后找到长度将可以使用,我需要一个更好的文化具体的方式。我需要一个通用的解决方案,可以适用于所有十进制字段

比如:

需要一个通用的清洁剂解决方案吗

private static bool IsDecimal(string value, int before, int after)
{
    if (value.Contains("."))
    {
        var parts = value.Split('.');

        if (parts[0].Length == before && parts[1].Length == after)
            return true;
    }
    else if(value.Length == before)
        return false;
    return true;
}
您可以这样尝试:

[RegularExpression(@"^\d{1,2}(\.\d{0,2})$",ErrorMessage = "Value contains more than 2 decimal places")]
public decimal Value { get; set; }

如果您不只是验证,请尝试使用mod:

44.29 % 1 = 0.29

从上面的答案我可以这样做

         string value = "2009.99";
         if (IsDecimal(value, 4, 4))
         { 
            Console.WriteLine("Valid");
         }

    private static bool IsDecimal(string value, int before, int after)
    {
        var r = new Regex(@"^\d{1," + before + @"}(\.\d{0," + after + @"})$");
        return r.IsMatch(value);
    }

你为什么提到SQL Server?这有什么关系吗?不知道你在问什么,正则表达式?类似这样的
^-?[0-9]{1,2}(\.[0-9]{1,2})$
根据我要检查的十进制数(4,2),其他列将有所不同。这不是sql server的问题。如果
string
内部是特定于区域性的,那么您不应该直接处理它。首先(使用该区域性)将其解析为
decimal
,然后使用正在检查的格式化程序(和中性区域性)将其转换回
string
;然后,您可以使用
Regex
或忽略初始区域性的任何东西应用字符串逻辑。小数点是本地化的,在世界许多地方它是逗号。千人分隔器也是如此。请改用Decimal.Try/Parse()。如果值*100-Decimal.Truncate(值*100)不是零,那么您会不高兴。可能,您应该比
\d+
更严格:
123456789.55
不是
十进制(4,2)
<代码>\d{1,2}<代码>看起来像输入错误:
\。
应为
         string value = "2009.99";
         if (IsDecimal(value, 4, 4))
         { 
            Console.WriteLine("Valid");
         }

    private static bool IsDecimal(string value, int before, int after)
    {
        var r = new Regex(@"^\d{1," + before + @"}(\.\d{0," + after + @"})$");
        return r.IsMatch(value);
    }