Tôi đang sử dụngLàm thế nào có thể Decimal.Round() ném OverflowException
Decimal.Round(decimal d)
MSDN nói nó có thể ném OverflowException
https://msdn.microsoft.com/en-us/library/k4e2bye2(v=vs.110).aspx
Tôi không chắc chắn làm thế nào mà có thể xảy ra. Tôi đã cố gắng nhìn qua việc thực hiện sử dụng ilSpy Và có cho đến khi thực hiện bên ngoài của:
// decimal
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void FCallRound(ref decimal d, int decimals);
Có ai có một đầu mối những gì đầu vào có thể ném ngoại lệ này?
http://stackoverflow.com/questions/3203959/overflow- exception-when-dividing-two-decimals-in-net – Equalsk
FWIW, [đây là nơi] (https://github.com/dotnet/coreclr/blob/32f0f9721afb584b4a14d69135bea7ddc129f755/src/classlibnative/bcltype/decimal.cpp#L175) rằng cuộc gọi đích được thực hiện trong .NET Core CLR - bạn có thể thấy cú ném 'OverflowException' trên dòng 188. –
Và [điều này xuất hiện] (https://github.com/dotnet/coreclr/blob/32f0f9721afb584b4a14d69135bea7ddc129f755/src/ palrt/decarith.cpp # L1215) để thực hiện 'VarDecRound'. Thoạt nhìn, tôi không thể thấy tại sao nó sẽ trả về kết quả thất bại cho 'FCallRound' (kết quả là ngoại lệ bị ném). Nó trả về 'E_INVALIDARG', nhưng điều kiện cho điều đó đã được kiểm tra bởi' FCallRound', hoặc 'NOERROR', vì vậy nó _seems_ rằng' OverflowException' không thực sự được ném ra. –