Math.Round
sử dụng của ngân hàng làm tròn theo mặc định. Bạn có thể thay đổi điều đó bằng cách chỉ định tùy chọn MidPointRounding
khác. Từ MSDN:
Làm tròn xa zero
giá trị Midpoint được làm tròn đến số tiếp theo xa zero. Ví dụ: ví dụ, 3,75 viên đạn đến 3,8, 3,85 vòng tới 3,9, -3,75 vòng tới -3,8, và -3,85 vòng tới -3,9. Hình thức làm tròn này được đại diện bởi thành viên điều tra MidpointRounding.AwayFromZero. Làm tròn từ zero là hình thức làm tròn được biết đến rộng rãi nhất.
Làm tròn đến gần nhất, hoặc của ngân hàng làm tròn
giá trị Midpoint được làm tròn đến số chẵn gần nhất. Ví dụ: cả 3.75 và 3.85 vòng đến 3.8, và cả hai -3.75 và -3.85 vòng đến -3.8. Hình thức làm tròn này được đại diện bởi thành viên liệt kê MidpointRounding.ToEven.
Làm tròn đến gần nhất là hình thức tiêu chuẩn làm tròn được sử dụng trong hoạt động tài chính và thống kê. Nó phù hợp với chuẩn IEEE 754, phần 4. Khi sử dụng trong nhiều hoạt động làm tròn, nó làm giảm các lỗi làm tròn mà là do luôn làm tròn giá trị trung điểm theo một hướng . Trong một số trường hợp, lỗi làm tròn này có thể là đáng kể.
Vì vậy, những gì bạn muốn là:
Math.Round(32.625, 2, MidpointRounding.AwayFromZero)
Math.Round(32.635, 2, MidpointRounding.AwayFromZero)
Như những người khác đã đề cập, nếu chính xác là rất quan trọng, bạn nên sử dụng Decimal
biến hơn là loại dấu chấm động. Ví dụ:
Math.Round(32.625D, 2, MidpointRounding.AwayFromZero)
Math.Round(32.635D, 2, MidpointRounding.AwayFromZero)
my đoán nó đã làm với các đại diện của số dấu chấm động, vì vậy 63,625 có thể thực sự 63,6249999 ... – thumbmunkeys
Nhưng tôi đang viết nó chỉ có "63,625". vì vậy nó không thể là "63.624999" tôi có sai không? – Mtok
Bạn, thật không may, sai - con số trông giống như 32.625 nhưng nội bộ nó được lưu trữ như là một giá trị Float, là không chính xác. Sử dụng một kiểu dữ liệu thập phân cho độ chính xác cao, nhưng hiệu suất chậm. –