2010-08-30 33 views
15

thể trùng lặp:
c# - How do I round a decimal value to 2 decimal places (for output on a page)Vòng đôi Để Hai Decimal Places

cách tốt nhất để làm tròn một đôi đến hai chữ số thập phân là gì và cũng có nó cố định ở mức 2 chữ số thập phân?

Ví dụ: 2,346 -> 2.35, 2 -> 2.00

tôi hy vọng để tránh một cái gì đó như thế này mà tôi phải chuyển đổi một đôi để chuỗi và sau đó trở lại một đôi mà có vẻ như là một cách xấu để đi về điều này.

+5

Thêm hai chữ số thập phân khi chúng bằng không là một điều tượng trực quan/đại diện, cái gì đó 'double' tự quan tâm không có gì. Vì vậy, bạn chắc chắn sẽ cần phải chuyển đổi chúng thành chuỗi để hiển thị. –

+0

Bạn nói đúng, cảm ơn. – Robert

Trả lời

30
double someValue = 2.346;  
String.Format("{0:0.00}", someValue); 
+4

Không cần phải gọi Math.Round tại đây. – phoog

4

Hãy xem Math.Round

+0

Math.Round không nối thêm số không. – Robert

+0

@Robert - bạn đang nói về hiển thị? – ChrisF

+0

Có để hiển thị. – Robert

15

Vòng giá trị cho độ chính xác mong muốn, và sau đó định dạng nó. Luôn luôn thích phiên bản Math.Round có chứa thông số làm tròn giữa điểm. Tham số này chỉ định cách xử lý các giá trị điểm giữa (5) làm chữ số cuối cùng.

Nếu bạn không chỉ định AwayFromZero làm giá trị cho thông số, bạn sẽ nhận được hành vi mặc định, đó là ToEven. Ví dụ, sử dụng ToEven như làm tròn phương pháp, bạn nhận được:

Math.Round(2.025,2)==2.02

Math.Round(2.035,2)==2.04

thay vào đó, sử dụng MidPoint.AwayFromZero param:

Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03

Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04

Vì vậy, đối với một tròn bình thường, nó là tốt nhất để sử dụng mã này:

var value=2.346; 
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero); 
var str=String.Format("{0:0.00}", result); 
+0

Không cần phải làm tròn giá trị. Ngoài ra, không cần sử dụng string.Format(). Thay vào đó, bạn có thể sử dụng 'var value = 2.346; var str = value.ToString ("0.00"); 'Cho dù bạn sử dụng double.ToString() hay string.Format(), bạn sẽ nhận được điểm giữa làm tròn đi từ số không. Vì vậy, tôi nên rephrase câu đầu tiên: Bạn chỉ nên sử dụng Math.Round() nếu bạn cần MidpointRounding.ToEven. – phoog

8
double someValue = 2.346;  
string displayString = someValue.ToString("0.00"); 

Lưu ý rằng Double.ToString (và do đó string.Format()) sử dụng trung điểm làm tròn đi từ số không, để trở thành 0,125 0,13. Đây thường là hành vi mong muốn để hiển thị. Những chuỗi này rõ ràng không nên được sử dụng để làm tròn.

Phương pháp này cũng không phù hợp cho làm tròn được yêu cầu trong phép tính toán học (nơi MidpointRounding.ToEven thường là phương pháp tốt nhất). Trong trường hợp đó, Math.Round() nên được sử dụng.

Các vấn đề liên quan