Tôi muốn làm điều này bằng cách sử dụng Math.Round
chức năngLàm thế nào để bạn làm tròn một số đến hai chữ số thập phân trong C#?
Trả lời
Hãy thử điều này:
twoDec = Math.Round(val, 2)
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.
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.
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
Khác hơn thế, tôi khuyên bạn nên (inputNumer, numberOfPlaces) Cách tiếp cận Math.round qua * 100/100 vì nó sạch hơn.
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() và 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 ...
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)
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.
Đ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). –
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.
chuỗi a = "10.65678";
thập phân d = Math.round (Convert.ToDouble (a.ToString()), 2)
// 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"
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
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 Would return 123456,64
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 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"
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 –
Tôi vết thương lý do tại sao MidPointRounding.ToEven là mặc định ... – Pedro77
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. –