2008-11-02 30 views

Odpowiedz

69

Spróbuj tego:

twoDec = Math.Round(val, 2) 
468

Oto przykład:

decimal a = 1.994444M; 

Math.Round(a, 2); //returns 1.99 

decimal b = 1.995555M; 

Math.Round(b, 2); //returns 2.00 

Można również zajrzeć do bankierów zaokrąglania/round-to- nawet przy następującym przeciążeniu:

Math.Round(a, 2, MidpointRounding.ToEven); 

Więcej informacji na ten temat: here.

+40

Powinieneś sprawdź, czy MidPointRounding.ToEven jest wartością domyślną. Jeśli chciałeś AwayFromZero, musiałbyś użyć przeciążenia –

+4

Jestem ranny, dlaczego MidPointRounding.ToEven jest domyślny ... – Pedro77

+2

Myślę, że powinno być: 'MidpointRounding', a nie 'MidPointRounding' na wypadek, gdyby ktoś zastanawiał się, dlaczego nie kompiluje. –

3

Powinieneś być w stanie określić liczbę cyfr, którą chcesz zaokrąglić do korzystania Math.round (YourNumber, 2)

Możesz przeczytać więcej here.

12

Wikipedia has a nice page zaokrąglanie w ogóle.

Wszystkie języki .NET (zarządzane) mogą korzystać z mechanizmów zaokrąglania czasu wykonywania wspólnego języka (CLR). Na przykład metoda Math.Round() (jak wspomniano powyżej) umożliwia programistom określenie typu zaokrąglania (Round-to-even lub Away-from-zero). Metoda Convert.ToInt32() i jej odmiany używają round-to-even. Metody Ceiling() i Floor() są powiązane.

Możesz również zaokrąglić z custom numeric formatting.

Należy pamiętać, że Decimal.Round() używa innej metody niż Math.Round();

Oto useful pos t na algorytmie zaokrąglania bankiera. Zobacz jeden z Raymonda humorystyczny posts here o zaokrąglenia ...

5

To dla zaokrągleniu do 2 miejsc po przecinku w C#:

label8.Text = valor_cuota .ToString("N2") ; 

W VB.NET:

Imports System.Math 
round(label8.text,2) 
31

Osobiście nigdy okrągłych byle co. Zachowajcie go tak stanowczy, jak to tylko możliwe, ponieważ zaokrąglanie jest w pewnym sensie trochę czerwonym śledziem w CS. Ale chcesz sformatować dane dla swoich użytkowników iw tym celu uważam, że dobrym podejściem jest string.Format("{0:0.00}", number).

+0

To działa lepiej w przypadku wyświetlania, szczególnie w przypadku pieniędzy, ponieważ 5,4 GBP (z Math.round) nie wygląda tak dobrze jak 5,40 GBP (w ten sposób). –

+0

Próbowałem wcześniej przed string.Format ("0: 0.00", liczba), ale to nie zadziałało. Te nawiasy kwadratowe są bardzo ważne, więc: string.Format ("{0: 0.00}", numer) działa. – FrenkyB

+4

@FrenkyB Kiedy mówisz "nawiasy kwadratowe", mam nadzieję, że masz na myśli nawiasy klamrowe. – Mathemats

22

Jeśli chcesz ciąg

> (1.7289).ToString("#.##") 
"1.73" 

lub

dziesiętną
> Math.Round((Decimal)x, 2) 
1.73m 

Ale pamiętaj! Zaokrąglanie nie jest dystrybucyjne, tj. round(x*y) != round(x) * round(y). Więc nie rób żadnego zaokrąglania aż do samego końca obliczeń, w przeciwnym razie stracisz celność.

1

string a = "10.65678";

dziesiętny D = Math.Round (Convert.ToDouble (a.ToString()) 2)

9

// konwersji zapisu do dwóch miejsc po przecinku

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" 

może również łączyć "0" z "#".

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" 
+1

String.Format ("{0: 0.00}", 140.6767554); ! = "140.67" Rzeczywiście renderuje jako "140.68" - zaokrągla w górę – AndyT

0
public double RoundDown(double number, int decimalPlaces) 
     { 
      return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces); 
     } 
2

Wiem, że stare pytanie, ale proszę zwrócić uwagę na następujące różnice między Math okrągłych i Format ciągu::

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" 
Powiązane problemy