2008-11-02 87 views

Trả lời

69

Hãy thử điều này:

twoDec = Math.Round(val, 2) 
468

Dưới đây là một ví dụ:

decimal a = 1.994444M; 

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

decimal b = 1.995555M; 

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

Bạn cũng có thể muốn nhìn vào ngân hàng làm tròn/vòng-to- ngay cả với tình trạng quá tải sau đây:

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

Có thêm thông tin về nó here.

+40

Bạn nên cla tuyên bố rằng MidPointRounding.ToEven LÀ mặc định. Nếu bạn muốn AwayFromZero bạn sẽ phải sử dụng quá tải –

+4

Tôi vết thương lý do tại sao MidPointRounding.ToEven là mặc định ... – Pedro77

+2

Tôi nghĩ rằng nó nên là: 'MidpointRounding' không' MidPointRounding' trong trường hợp ai đó tự hỏi tại sao nó không biên dịch. –

3

Bạn sẽ có thể để xác định số chữ số bạn muốn làm tròn đến sử dụng Math.round (YourNumber, 2)

Bạn có thể đọc thêm here.

12

Wikipedia has a nice page về làm tròn nói chung.

Tất cả ngôn ngữ .NET (được quản lý) có thể sử dụng bất kỳ cơ chế làm tròn ngôn ngữ chung nào (CLR). Ví dụ, phương pháp Math.Round() (như đã đề cập ở trên) cho phép nhà phát triển xác định loại làm tròn (Vòng sang thậm chí hoặc Xa-số không). Phương thức Convert.ToInt32() và các biến thể của nó sử dụng round-to-even. Các phương thức Ceiling()Floor() có liên quan.

Bạn cũng có thể làm tròn với custom numeric formatting.

Lưu ý rằng Decimal.Round() sử dụng một phương pháp khác với Math.Round();

Dưới đây là một số useful pos t trên thuật toán làm tròn của ngân hàng. Xem một trong những của Raymond hài ​​hước posts here về làm tròn ...

5

này là dành cho làm tròn đến 2 chữ số thập phân trong C#:

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

Trong VB.NET:

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

Cá nhân tôi không bao giờ tròn bất cứ điều gì. Giữ nó càng kiên định càng tốt, vì làm tròn là một chút của một cá trích đỏ trong CS anyway. Nhưng bạn muốn định dạng dữ liệu cho người dùng của mình và đến cuối cùng, tôi thấy rằng string.Format("{0:0.00}", number) là một cách tiếp cận tốt.

+0

Điều này hoạt động tốt hơn cho mục đích hiển thị, đặc biệt là với tiền, như £ 5.4 (với Math.round) không nhìn cũng như £ 5.40 (theo cách này). –

+0

Tôi đã thử trước string.Format ("0: 0.00", số), nhưng nó không hoạt động. Những dấu ngoặc vuông là rất quan trọng, vì vậy: string.Format ("{0: 0.00}", số) hoạt động. – FrenkyB

+4

@ FrenkyB Khi bạn nói 'dấu ngoặc vuông', tôi hy vọng bạn có nghĩa là niềng răng. – Mathemats

22

Nếu bạn muốn một chuỗi

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

Hoặc một số thập phân

> Math.Round((Decimal)x, 2) 
1.73m 

Nhưng hãy nhớ! Làm tròn không phân phối, tức là. round(x*y) != round(x) * round(y). Vì vậy, không làm bất kỳ làm tròn cho đến khi kết thúc một phép tính, nếu không bạn sẽ mất độ chính xác.

1

chuỗi a = "10.65678";

thập phân d = Math.round (Convert.ToDouble (a.ToString()), 2)

9

// chuyển đổi tối đa hai chữ số thập phân

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" 

cũng có thể kết hợp "0" với "#".

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" Nó thực sự hiển thị là "140,68" - làm tròn lên – AndyT

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

Math.floor (123456,646 * 100)/100 Would return 123456,64

2

Tôi biết nó là một câu hỏi cũ nhưng xin lưu ý cho những khác biệt sau đây giữa Math vòngĐịnh dạng chuỗi vòng:

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" 
Các vấn đề liên quan