Я используюКак Decimal.Round() бросить OverflowException
Decimal.Round(decimal d)
MSDN говорит, что может бросить OverflowException
https://msdn.microsoft.com/en-us/library/k4e2bye2(v=vs.110).aspx
Я не уверен, как это может произойти. Я попытался глядя на реализацию с использованием ilSpy И получил, пока внешняя реализацию:
// decimal
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void FCallRound(ref decimal d, int decimals);
не получило ли кто-нибудь подсказку, что вход может бросить это исключение?
http://stackoverflow.com/questions/3203959/overflow- exception-when-division-two-decimals-in-net – Equalsk
FWIW, [это где] (https://github.com/dotnet/coreclr/blob/32f0f9721afb584b4a14d69135bea7ddc129f755/src/classlibnative/bcltype/decimal.cpp#L175) этот целевой вызов реализован в .NET Core CLR - вы можете увидеть бросок «OverflowException» в строке 188. –
И [это появляется] (https://github.com/dotnet/coreclr/blob/32f0f9721afb584b4a14d69135bea7ddc129f755/src/ palrt/decarith.cpp # L1215) для реализации «VarDecRound». На первый взгляд, я не понимаю, почему он вернет результат сбоя в «FCallRound» (в результате возникает исключение). Он либо возвращает 'E_INVALIDARG', но условие для этого уже проверено' FCallRound', или 'NOERROR', поэтому _seems_, что' OverflowException' на самом деле никогда не будет выброшено. –