2016-10-04 9 views
0

In unserer Anwendung gibt es rund 200 decimal Variablen, gibt es eine Möglichkeit, die wir dezimal auf 2 Plätze vor der Zuordnung abgerundet werden können.Dezimal Dezimal auf Anwendungsebene in C#

Oder jede Anwendungsebene config diese

zu erreichen

Derzeit versuchen wir unter

public static decimal RoundOff(this decimal value) 
{ 
    return Math.Round(value,2); 
} 
+0

Wollen Sie ** ** jeder dezimal sein automagically um 2 Dezimalstellen gerundet und ignorieren danach jede Ziffer? – zdimension

+0

ja, jede Dezimalstelle nach 2 Dezimalstellen sollte ignoriert werden –

+1

Was möchten Sie tun, wenn Sie zwei Dezimalstellen hinzufügen? Sollten sie vor oder nach dem Hinzufügen abgeschnitten werden? –

Antwort

2

Es kommt darauf an. Wenn die Korrektheit der Berechnung davon abhängt, dass die Variablen zuvor gerundet wurden, ist das Formatieren der Ausgabe keine Option. Sie könnten halten Sie Ihre Erweiterungsmethode auf jeden Auftrag verwenden, aber das ist potenziell fehleranfällig (Sie können verpassen) oder Sie können eine Wrapper-Klasse erstellen:

public struct RoundedDecimal: IEquatable<RoundedDecimal>, IFormattable, IComparable<RoundedDecimal> 
{ 
    private readonly decimal value; 

    public RoundedDecimal(decimal value) 
    { 
      this.value = Math.Round(value, 2); 
    } 

    public static implicit operator RoundedDecimal(decimal value) => 
     new RoundedDecimal(value); 

    public static explicit operator Decimal(RoundedDecimal value) => 
     value; 

    public static RoundedDecimal operator *(RoundedDecimal left, RoundedDecimal right) => 
     new RoundedDecimal(left.value * right.value); 

    //and so on 
} 
+0

Also müssen wir alle 'Dezimal' durch' RoundedDecimal' ersetzen –

+0

@vikas ja, das stimmt. – InBetween

0

Nun, wenn Sie jede dezimal wollen auf zwei Dezimalstellen gerundet werden, man konnte (seeeehr hässlich) mach deine eigene Zahl struct mit impliziten Operatoren zum Umwandeln von und zum Dezimieren dieser Runde auf zwei Dezimalstellen. Auf diese Weise wird beim Schreiben einer Dezimalkonstante in den Code, die an eine Funktion oder ein Feld "erwartet" übergeben wird (oder umgekehrt), diese automatisch auf zwei Dezimalstellen gerundet. Aber es ist immer noch besser und sauberer, Ihre Erweiterungsmethode weiter zu verwenden.

+0

Hässlich? Warum? Ich verstehe nicht. – InBetween