2016-08-03 16 views
2

Bitte lassen Sie mich gute Weise wissen, Dezimalwert zu validieren, wenn dezimal (4,2) sollte es 2 numerische und 2 Dezimalstellen akzeptieren.So validieren Sie die Nachkommastellen

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

Dann finden die Länge wird verwendet werden kann, brauche ich eine bessere Kultur spezifische Weise. Ich brauche eine generische Lösung, die auf alle Dezimalfelder angewendet werden kann.

Like:

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

eine generische sauberere Lösung benötigen für diese

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

tun Warum Sie SQL Server erwähnen? Ist das irgendwie relevant? Nicht sicher, was du fragst. –

+2

Regulärer Ausdruck? So etwas wie '^ -? [0-9] {1,2} (\. [0-9] {1,2})? $ ' –

+0

Entsprechend der Dezimalzahl (4,2) möchte ich prüfen, ob es geht für andere Spalten anders sein. Es ist keine SQL Server Frage. – User007

Antwort

3

Sie können wie folgt versuchen:

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

Wahrscheinlich sollten Sie restriktiver als '\ d +' sein: '123456789.55' ist nicht' dezimal (4,2) '; '\ d {1,2}'; '.' sieht aus wie ein * Tippfehler *:' \ .' wird erwartet –

0

Wenn Sie whant nur bestätigen, versuchen Sie zu verwenden, mod:

44.29 % 1 = 0.29 
0

Aus den oben genannten Antworten konnte ich es wie dieses

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