User007
User007

Reputation: 37

How to validate decimal places

Please let me know good way to validate decimal value, if decimal(4,2) it should accept 2 numeric and 2 decimal places.

var value = "44.29";
var dec = value.Split('.');

Then finding the length will can be used, I need a better culture specific way. I need a generic solution which can be applied to all decimal field.

Like:

validate(int before,int afterdecimal);
var valid  = validate(2,2);

Need a generic cleaner solution for this

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;
}

Upvotes: 2

Views: 4281

Answers (3)

User007
User007

Reputation: 37

From the above answers I was able to do it like this

         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);
    }

Upvotes: 0

Rahul Tripathi
Rahul Tripathi

Reputation: 172448

You can try like this:

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

Upvotes: 3

Sergio Lopes
Sergio Lopes

Reputation: 52

If you whant just validate, try to use the mod:

44.29 % 1 = 0.29

Upvotes: 1

Related Questions