【发布时间】:2013-03-09 20:12:19
【问题描述】:
我真的被这个难住了。我正在为 Windows Phone 7.5 编写 C#;我从文本框中获取文本,将其解析为数组,然后使用 Convert.ToInt32 将每个数组元素转换为 Int32,然后通过一系列数学计算运行生成的 Int32 值,将 Int32 值相乘并添加到硬编码数字(全部取决于在 UI 中选择的内容)。
在我进行结果计算并将它们相乘之前一切都很好:我通过将两个正数相乘得到一个负数!这是我唯一一次对源自使用 Convert.ToInt32 函数的方法中的两个数字进行任何计算。当它们被相加、相减甚至相除时,数学就正确了。但是当它们相乘时,没有骰子。数学完全错误;我仔细检查了 LibreOffice Calc 中的数学,结果不匹配。单步执行代码时,一切都是正确的,直到源自使用 Convert.ToInt32 函数的方法中的数字相乘。有什么想法吗?
【问题讨论】:
-
您想向我们展示您的代码吗?
-
听起来像是溢出。你在使用大数字吗?
-
首先,如果您需要超出 int 范围的准确结果,请使用 long、decimal 或 BigIntegers 进行算术运算。其次,如果你认为溢出是一个bug并且你想找到它,那么将你的算术放在
checked { ... }块中,任何整数溢出都会成为异常。这将帮助您找到错误。