我试图分两位小数,然后显示结果。令人讨厌的是,这只发生在我们的服务器上,并且如果我在本地运行代码,它似乎工作得很好。这是我尝试运行在.NET中除二位小数时发生溢出异常
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位工作站? – cRichter 2010-07-08 13:56:10
如果只是,它的64位基于xeon的服务器运行服务器2003 x64和.net 3.5 :( – Spud1 2010-07-08 14:06:05
肯定要轮到28个地方,你需要看第29位,如果你要求27位,它仍然这样做吗? – James 2010-07-08 14:43:37