a

Câu hỏi Làm thế nào để bạn làm tròn một số đến hai chữ số thập phân trong C #?


Tôi muốn làm điều này bằng cách sử dụng Math.Round chức năng


289
2017-11-02 16:07


gốc




Các câu trả lời:


Dưới đây là một số 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 các ngân hàng làm tròn / vòng-to-even với quá tải sau đây:

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

Có thêm thông tin về nó đây.


494
2017-11-02 16:13



Bạn nên làm rõ rằng MidPointRounding.ToEven IS là mặc định. Nếu bạn muốn AwayFromZero bạn sẽ phải sử dụng quá tải - Brian Vander Plaats
Tôi bị thương tại sao MidPointRounding.ToEven là mặc định ... - Pedro77
Tôi nghĩ nó nên như vậy: MidpointRounding không phải MidPointRounding trong trường hợp ai đó tự hỏi tại sao nó không biên dịch. - Mark Rhodes
Nếu bạn muốn làm tròn lên đến 2 chữ số thập phân, thêm 0.005 với số trước khi làm tròn. Tương tự như vậy để làm tròn xuống, trừ 0.005 trước khi đi qua Math.Round chức năng. - orad
Lý do mà .NET mặc định MidPointRounding.ToEven (aka "Bankers Rounding") là bởi vì tất cả chúng ta đều học cách làm tròn ở trường nơi .5 làm tròn lên quá nhiều làm tròn lên. Đây là vấn đề khi xử lý tiền, tính toán thuế, v.v. - asporter


Thử cái này:

twoDec = Math.Round(val, 2)

73
2017-11-02 16:11





Cá nhân tôi không bao giờ làm tròn cái gì cả. 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à 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.


33
2018-02-23 02:01



Điều này làm việc tốt hơn cho mục đích hiển thị, đặc biệt là cho tiền, như £ 5,4 (với Math.round) không nhìn cũng như £ 5,40 (theo cách này). - Peter Gordon
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
@ 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


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.


25
2018-03-27 01:02





Wikipedia có một trang đẹp về làm tròn nói chung.

Tất cả cá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ụ: Math.Round () (như đã đề cập ở trên) phương pháp cho phép các nhà phát triển để xác định loại làm tròn (Round-to-even hoặc Away-from-zero). Phương thức Convert.ToInt32 () và các biến thể của nó sử dụng vòng-to-even. Các Trần nhà() và Sàn nhà() các phương thức có liên quan.

Bạn có thể làm tròn với định dạng số tùy chỉnh cũng.

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

Đây là pos hữu ícht trên thuật toán làm tròn của ngân hàng. Xem một trong những sự hài hước của Raymond bài đăng ở đây về làm tròn ...


12
2017-11-02 16:27





// 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"

10
2018-01-15 09:15



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


Tôi biết câu hỏi cũ của nó nhưng xin lưu ý về những khác biệt sau giữa Toán tròn và Đị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"

6
2017-11-02 09:12





Điều này là để 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)

5
2018-02-22 21:06





Một điều bạn có thể muốn kiểm tra là Cơ chế làm tròn của Math.Round:

http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx

Ngoài ra, tôi khuyên bạn nên sử dụng phương thức Math.Round (inputNumer, numberOfPlaces) trên * 100/100 vì nó sạch hơn.


4
2017-11-02 16:15