在.NET中除两位小数时出现溢出异常

2024-02-19

我在尝试除以两位小数然后显示结果时遇到问题。令人烦恼的是,这只发生在我们的服务器上,如果我在本地运行代码,它似乎工作得很好。这是我试图运行的代码


decimal dOne = -966.96M;
decimal dTwo = 2300M;

decimal dResult = Decimal.Round((dOne / dTwo), 28, 
                               MidpointRounding.AwayFromZero);

结果数字(从 Windows 计算器生成)是

-0.43346086956521739130434782608696

这总是会导致溢出异常:

System.OverflowException: Value was either too large or too small for a Decimal.
   at System.Decimal.FCallDivide(Decimal& result, Decimal d1, Decimal d2)
   at System.Decimal.op_Division(Decimal d1, Decimal d2)

这确实有点道理,因为结果数字超过 32 位小数,而小数最多只能保留 28 位..但我不确定如何执行此除法,因为它似乎将结果存储在小数中在内存中输入,然后四舍五入并存储它。我也尝试过将其直接转换为字符串而不是将其存储为十进制,但这也存在同样的问题。

有任何想法吗?我是否做了一些明显愚蠢的事情(最有可能),是否有更好的方法来执行此计算?


尝试转换为double计算之前,然后返回decimal之后如果您需要:

decimal dOne = -966.96M;
decimal dTwo = 2300M;

double one = (double)dOne;
double two = (double)dTwo;

double result = one / two;

decimal dResult = (decimal)result; // Additional rounding may be necessary
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在.NET中除两位小数时出现溢出异常 的相关文章

随机推荐