ich dies tun wollen dies mit der Math.Round
FunktionWie runden Sie eine Zahl in C# auf zwei Dezimalstellen?
Antwort
Versuchen:
twoDec = Math.Round(val, 2)
Hier ist ein Beispiel:
decimal a = 1.994444M;
Math.Round(a, 2); //returns 1.99
decimal b = 1.995555M;
Math.Round(b, 2); //returns 2.00
Sie auch auf Banker sehen möchten Runden/Round-to- auch bei folgender Überlast:
Math.Round(a, 2, MidpointRounding.ToEven);
Es gibt weitere Informationen darüber here.
sollten Sie in der Lage sein, die Zahl der Stellen angeben Sie Math.Round (IhreNummer, 2) mit
Sie lesen können mehr here runden möchten.
Eine Sache, die Sie prüfen möchten kann, ist der Rundungsmechanismus Math.Round:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Other than that, empfehle ich die Math.Round (inputNumer, numberOfPlaces) Ansatz über die * 100/100 eins, weil es sauberer ist.
Wikipedia has a nice page auf Rundung im Allgemeinen.
Alle .NET-Sprachen (verwaltete Sprachen) können alle CLR-Mechanismen (Common Language Runtime) verwenden. Zum Beispiel erlaubt die Math.Round() (wie oben erwähnt) Methode dem Entwickler, die Art der Rundung (Round-to-Even oder Away-from-Zero) anzugeben. Die Convert.ToInt32() -Methode und ihre Variationen verwenden round-to-even. Die Methoden Ceiling() und Floor() sind verwandt.
Sie können auch mit runden.
Beachten Sie, dass Decimal.Round() eine andere Methode als Math.Round() verwendet;
Hier ist ein useful pos t auf dem Banker-Algorithmus. finden Sie in einem von Raymonds humoristischen posts here über Rundung ...
Dies ist für in C# 2 Dezimalstellen gerundet:
label8.Text = valor_cuota .ToString("N2") ;
In VB.NET:
Imports System.Math
round(label8.text,2)
Persönlich habe ich nie Runde etwas. Halten Sie es so entschlossen wie möglich, denn das Runden ist in CS sowieso ein bisschen wie ein Ablenkungsmanöver. Aber Sie möchten Daten für Ihre Benutzer formatieren, und zu diesem Zweck finde ich, dass string.Format("{0:0.00}", number)
ein guter Ansatz ist.
Dies funktioniert besser für Anzeigezwecke, besonders für Geld, da £ 5,4 (mit Math.round) nicht so gut aussieht wie £ 5,40 (auf diese Weise). –
Ich habe vor String.Format ("0: 0.00", Nummer) versucht, aber es hat nicht funktioniert. Diese eckigen Klammern sind sehr wichtig, also: string.Format ("{0: 0.00}", Zahl) funktioniert. – FrenkyB
@FrenkyB Wenn du 'eckige Klammern' sagst, hoffe ich, dass du Klammern meinst. – Mathemats
Wenn Sie einen String möchten
> (1.7289).ToString("#.##")
"1.73"
Oder eine Dezimalzahl
> Math.Round((Decimal)x, 2)
1.73m
Aber denken Sie daran! Die Rundung ist nicht distributiv, dh. round(x*y) != round(x) * round(y)
. Machen Sie also keine Rundung bis zum Ende einer Berechnung, sonst verlieren Sie die Genauigkeit.
Zeichenfolge a = "10.65678";
decimal d = Math.Round (Convert.ToDouble (a.ToString()), 2)
// konvertieren bis auf zwei Dezimalstellen
String.Format("{0:0.00}", 140.6767554); // "140.67"
String.Format("{0:0.00}", 140.1); // "140.10"
String.Format("{0:0.00}", 140); // "140.00"
Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2); // 140.67
decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2); // 140.67
======== =
// just two decimal places
String.Format("{0:0.##}", 123.4567); // "123.46"
String.Format("{0:0.##}", 123.4); // "123.4"
String.Format("{0:0.##}", 123.0); // "123"
kann auch "0" mit "#" kombinieren.
String.Format("{0:0.0#}", 123.4567) // "123.46"
String.Format("{0:0.0#}", 123.4) // "123.4"
String.Format("{0:0.0#}", 123.0) // "123.0"
String.Format ("{0: 0.00}", 140.6767554); ! = "140.67" Es wird tatsächlich als "140,68" gerendert – AndyT
public double RoundDown(double number, int decimalPlaces)
{
return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces);
}
Math.Floor (123456,646 * 100)/100 123456,64
zurückkehren würde ich seine eine alte Frage wissen, aber beachten Sie bitte die folgenden Unterschiede zwischen Math Runde und Zeichenkettenformat rund:
decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump(); // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"
decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump(); // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"
Sie sollten cla Bestätigen Sie, dass MidPointRounding.ToEven der Standardwert ist. Wenn Sie AwayFromZero wollten, müssten Sie die Überladung verwenden –
Ich wuunder warum MidPointRounding.ToEven der Standard ist ... – Pedro77
Ich denke, es sollte sein: 'MidpointRounding' nicht' MidPointRounding' falls sich jemand fragt, warum es nicht kompiliert. –