Theo tài liệu này, decimal.Round
phương pháp này sử dụng thuật toán làm tròn, thậm chí không phổ biến đối với hầu hết các ứng dụng. Vì vậy, tôi luôn luôn kết thúc việc viết một hàm tùy chỉnh để thực hiện thuật toán làm tròn nửa tự nhiên hơn:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
Có ai biết lý do đằng sau quyết định thiết kế khung này không?
Có bất kỳ triển khai tích hợp nào của thuật toán nửa vòng vào khung không? Hoặc có thể một số API Windows không được quản lý?
Nó có thể gây hiểu lầm cho người mới bắt đầu chỉ đơn giản là viết decimal.Round(2.5m, 0)
mong đợi 3 là kết quả nhưng thay vào đó lại nhận được 2.