2016-06-30 11 views
1

Ich muss eine Zahl auf 4 Dezimalstellen aufzurunden.Wie wird eine Dezimalzahl auf eine bestimmte Anzahl von Ziffern aufgerundet?

This answer nicht hilft, weil die Methode:

public static decimal RoundUp(this decimal input, int places) 
    { 
     decimal multiplier = Convert.ToDecimal(Math.Pow(10, Convert.ToDouble(places))); 
     return Math.Ceiling(input * multiplier)/multiplier; 
    } 

wird Nummer 1,12333 bis 1,1234 aufrunden (wie erwartet), aber 1,123304 wird auf 1,1233 aufzurunden und ich brauche es 1,1234 zu sein.

+3

aber wenn Sie '1.123300' haben, sollte es' 1.1233' sein? –

+0

Ich denke, Sie müssen nur 0,5 zur ursprünglichen Eingangsnummer vor dem Runden hinzufügen. – AnthonyLambert

+0

Mögliches Duplikat von [Aufrunden bis zu 2 Dezimalstellen in C#] (http://stackoverflow.com/questions/7075201/rounding-up-to-2-decimal-places-in-c-sharp) – alegz

Antwort

1

Die von Ihnen gepostete Methode funktioniert. Wahrscheinlich arbeiten Sie mit falschen Datentypen oder haben andere Werte als Sie denken. Beispielcode:

RoundUp(1.123304M, 4) // 1.1234 

Notiere die M nach dem buchstäblichen - dies bedeutet die Zahl als Dezimalzahl wörtlichen, eher als das Doppelte. Aber egal, was ich mache, ich kann Ihr Ergebnis trotzdem nicht replizieren, so dass Sie wahrscheinlich nicht den Wert haben, den Sie zu haben glauben. Halten Sie alles in Dezimalzahlen, und alles wird gut. Beachten Sie, dass Sie für große Werte von places möglicherweise Ihre eigene Math.Pow-Funktion erstellen müssen - oder erstellen Sie einfach eine schnelle Nachschlagetabelle für die Werte, die Sie tatsächlich verwenden (z. B. 10000 in Ihrem Beispiel).

+0

Sie haben recht, Es klappt. Ich muss einen Fehler gemacht haben. Gibt es eine Möglichkeit, diese Frage zu löschen? – alegz

+0

Direkt unter den Tags gibt es einen 'delete'-Link (leider erscheint er * nicht * als Link - ein bisschen ironisch, wenn man bedenkt, dass es eines der UX" schlechten Dinge zu tun ist ", erwähnt Joel in seinem UX-Buch: P). – Luaan