2011-09-09 28 views
11

Trong C# Có sự khác biệt nào về độ chính xác của hai chiến lược làm tròn thập phân MidpointRounding.ToEvenMidpointRounding.AwayFromZero? Tôi có nghĩa là cả hai đều đảm bảo phân phối đồng đều giữa các con số được làm tròn đến, hay là một chiến lược làm tròn để biểu diễn các con số được làm tròn so với cái kia?C# Làm tròn MidpointRounding.ToEven vs MidpointRounding.AwayFromZero

+1

Câu trả lời được chấp nhận cho câu hỏi này: http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default nên rõ ràng mọi thứ lên :) – MattDavey

+0

tôi nghĩ rằng ví dụ dưới đây giải thích nó tốt hơn. :) –

+1

vâng, nó có :) - câu hỏi được liên kết có rất nhiều thông tin cơ bản .. – MattDavey

Trả lời

27

Từ MSDN:

Theo mặc định, Math.Round sử dụng MidpointRounding.ToEven. Hầu hết mọi người không quen thuộc với "làm tròn để thậm chí" như là thay thế, "làm tròn đi từ số không" thường được dạy ở trường. .NET mặc định là "Làm tròn đến thậm chí" vì nó có tính thống kê cao hơn bởi vì nó không chia sẻ xu hướng "làm tròn đi từ số không" để làm tròn một chút thường xuyên hơn nó tròn xuống (giả sử các số được làm tròn có xu hướng dương.)

Tùy thuộc vào tập dữ liệu, phép tính số học đối xứng có thể giới thiệu một xu hướng lớn, vì nó luôn làm tròn giá trị trung điểm trở lên. Để lấy một ví dụ đơn giản, giả sử rằng chúng tôi muốn xác định giá trị trung bình của ba giá trị, 1,5, 2,5 và 3,5, nhưng chúng tôi muốn đầu tiên làm tròn chúng thành số nguyên gần nhất trước khi tính giá trị trung bình của chúng. Lưu ý rằng giá trị trung bình thực của các giá trị này là 2.5. Sử dụng số học số học làm tròn, các giá trị này thay đổi thành 2, 3 và 4, và giá trị trung bình của chúng là 3. Sử dụng các ngân hàng làm tròn, các giá trị này thay đổi thành 2, 2 và 4, và giá trị trung bình của chúng là 2,67. Bởi vì phương thức làm tròn thứ hai gần với giá trị trung bình thực của ba giá trị, nó cung cấp sự mất mát dữ liệu ít nhất.

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

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