【发布时间】:2010-07-08 13:16:30
【问题描述】:
我在尝试将两位小数相除然后显示结果时遇到问题。令人讨厌的是,这只发生在我们的服务器上,如果我在本地运行代码,它似乎工作得很好。这是我要运行的代码
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 位。但我不确定如何执行此除法,因为它似乎正在存储结果在内存中的十进制类型中,然后将其四舍五入并存储它。我也尝试将其直接转换为字符串,而不是将其存储在十进制中,但这有同样的问题。
有什么想法吗?我是否做了一些明显愚蠢的事情(很可能),有没有更好的方法来执行这个计算?
【问题讨论】:
-
难道你有一个 32 位服务器,但一个 64 位工作站?
-
如果只是,它是一个基于 64 位 xeon 的服务器,运行服务器 2003 x64 和 .net 3.5 :(
-
肯定要四舍五入到 28 位,您需要查看第 29 位。如果你要求 27,它还会这样做吗?